多线程

多线程

进程和线程

操作系统可以“同时”执行多个任务,每个任务就是进程;一个程序运行时就是一个进程。进程是操作系统的执行单元。

同一个进程可以“同时”并发执行多个任务,每个任务就是线程。线程是进程的执行单元。线程是程序中独立的,并发的执行流。

线程创建

继承Thread类 和 实现Runnable,Callable接口

  • 定义 继承hread类 的子类 --> 重写父类Thread类的 run() 方法 (线程执行体) --> 创建Thread子类的实例, (即新建线程对象) --> 调用线程对象的start() 方法启动线程,(即线程就绪)

  • 定义 实现Runnable接口 的类 --> 重写接口的 run() 方法 --> 创建 类的实例对象 target-- > new Thread( target ).start()

  • 定义 实现Callable接口 的类 --> 重写接口的 call( V ) 方法 -->新建Callable对象 --> 使用Runnable接口的 实现类 FutureTask 包装 Callable对象 target--> new Thread(target).start()

线程的生命周期

控制线程

  • join()

当前线程的执行流 调用到 其他线程的join() 方法时,当前线程将被阻塞,直到加入的join()方法的 其他线程执行完。

  • daemon thread

守护线程,后台线程,服务于其他线程的线程。当所有前台线程死亡,后台线程才会死亡。如gc

  • 线程睡眠sleep()、线程礼让yiled() 、线程优先级

线程同步

  • syncronized 关键字

syncronized可以修饰代码块和方法:

// 同步代码块:
syncronized(obj){ // obj为同步监视器的锁定,一般为各线程的共享资源
   //同步代码块
}

//......
// 同步方法
public syncronized void method(){
    // 同步方法
}
  • 同步锁Lock

常用的是Lock的实现类 ReentrantLock(可重用锁);可以显式的加锁,释放锁。

posted @ 2021-01-11 15:51  lapam2  阅读(75)  评论(0)    收藏  举报