Java应用程序编程接口APIDay11

一、多线程
1.概念
  指从软件或者硬件上实现多个线程并发执行的技术

2.并行 和 并发
  1)并行:指两个或者多个事件在 同一时刻 发生(同时执行)
  2)并发:指两个或者多个事件在 同一时间段内 发生(交替执行)

3.程序、进程、线程
  1)程序:指一个指令的集合,安装的软件(一款app
  2)进程:正在运行的程序
    每一个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程
  3)线程:进程中的一个执行单位,负责当前进程中程序的执行,一个进程中至少
  包含一个线程
    a.线程就是cpu调度的最小单位
    b.单线程:一个进程如果只有一条执行路径,则称之为单线程
    c.多线程:一个进程如果包含多条执行路径,则称之为多线程。

4.线程类(Thread)
  1)创建线程的方式
    a.继承方式:直接继承Thread类
    b.实现步骤
      ①自定义线程类,继承Thread
      public class MyThread extends Thread{}
      ②自定义线程类中重写run()
       @Override
          public void run(){
              }
      ③创建线程对象
      MyThread my1 = new MyThread();
      ④start()寻找run()开启线程
      my1.start();

      b.注意:run()和start()的区别?
          Ⅰ.run():封装线程执行的代码,直接调用,相当于普通方法,无线程效果
          Ⅱ.start():启动线程,由JVM调用该线程的run()执行

      c.缺点:一个类只能有一个父类,当此类继承Thread,这个类只能是线程类,有局限性

  2)实现方式:实现Runnable接口
    a.实现步骤:
      ①自定义任务类,实现Runnable接口
public class MyRunnable implements Runnable
      ②在自定义任务类中,重写run()
      ③在测试类中,创建任务类对象
       MyRunnable r1 = new MyRunnable();
      ④通过任务类对象,构建线程对象
Thread t1 = new Thread(r1);
Thread t2 = new Thread(new MyRunnable());
      ⑤start()开启线程

    b.优点:类出了可以实现Runnable接口,还可以继承其他类,和其他接口,
    功能扩展性比较强,没有太多局限性

  3)优化方式:使用匿名内部类继承Thread或实现Runnable
a.匿名内部类结合Thread
     Thread t = new Thread(){
      public void run(){

      }
     }

   b.匿名内部类结合Runnable
     Runnable r = new Runnable(){
      public void run(){

      }
     }
     Thread t = new Thread(r);


2.常用方法
  void setName(String name):
   将此线程的名称更改为等于参数name

  String getName():返回此线程的名称

  Thread currentThread():
   返回对当前正在执行的线程对象的引用

  static void sleep(long millis):
   使当前正在执行的线程停留(暂停执行)指定的毫秒数

  final int getPriority():返回此线程的优先级

  final void setPriority(int newPriority):
   更改此线程的优先级线程默认优先级是5;线程优先级的范围是:1-10

  void setDaemon(boolean on)
   将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机将退出

  注意:java中的垃圾回收机制(GC)就是守护线程

3.线程同步【线程安全】
  1)前提条件:多个线程同时操作同一个资源
    存在问题:
    因为线程执行run(),不会一直执行,中间在任何地方都肯会中断.
      a.如果cpu重新分配时间片是原来的窗口,则继续往下执行
      b.入股cpu重新分配时间片是新的窗口,则重投开始执行

    解决方法:线程同步,给线程加锁

  2)线程同步锁【synchronized】
    实现线程同步的方式
      a.同步代码块(synchronized)
      b.同步方法(synchronized)
      c.锁机制(lock)

      (1)同步代码块(synchronized)
        a.概念:synchronized关键词用于修饰方法中的某块区域,表示只对
        这个区域的资源实行互斥访问。

        b.格式定义
        synchronized(同步锁/任意对象){
        需要执行同步操作的代码
       }

        c.同步锁
        ① 对象的同步锁只是一个概念,可以想像在对象上标记了一个锁
          Ⅰ 锁对象:可以是任何类型
          Ⅱ 多个线程对象:要是用同一把锁

      (2)同步方法(synchronized)
        a.普通同步方法
          ①格式
            修饰符 synchronized 返回值类型 方法名(){}

          ②静态同步方法的锁对象: 类名.class

      (3)锁机制(Lock)
        a.创建方式:new ReentrantLock
        b.常用方法:
          void lock() :加锁
          void unlock() :解锁
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值