W
e
l
c
o
m
e
: )

多线程的部分总结

线程的常用方法

  • yield释放当前cpu执行权(进入就绪状态)
  • join:在线程1中调用线程2的join方法,线程1进入阻塞状态,直到线程2完全执行完之后,线程1才会结束阻塞状态(进入阻塞状态)
  • sleep(long millitime)让当前线程进入阻塞状态
  • getPriority 获取当前线程优先级
  • setPriority(1-10)设置线程优先级

创建线程的几种方式?
1:继承thread类。重写run()方法,start开启线程
2:实现runnable接口,重写run()方法,执行线程传入runnable接口实现类,调用start方法
3:实现callable接口,,重写call()方法

线程的生命周期

创建状态:生成线程对象,并没有调用start方法。这时线程处于创建状态
就绪状态:调用了start方法之后,线程进入就绪状态,但此时线程调度程序还没有把该线程设置为当前线程,此时就处于就绪状态。当线程运行之后,从等待或睡眠中回来,也处于就绪状态
运行状态:线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入运行状态,开始运行run函数
阻塞状态:线程正在运行时被暂停,通常是为了等待某个事件的发生之后在运行。sleep,suspend,wati等方法都可以导致线程阻塞
死亡状态:一个线程执行run之后或调用stop方法,该线程就会死亡。已死亡的线程无法使用start方法另其进入就绪状态

线程的生命周期?
创建、就绪、运行、阻塞、死亡

继承thread与实现runnable接口两种方式的比较

1:继承具有单继承性
2:runnable天然可以共享数据
结论:优先使用实现runnable接口的方式创建线程

解决线程安全的几种方式

  • 同步代码块
    格式:
synchronized(同步监视器){

}
  • 同步方法
private static synchronized void methodName(){
       
   
}

同步方法扔然涉及同步监视器,只是不需要显示的声明,非静态的同步方法,监视器是:this,静态的同步方法,监视器是:当前类本身

  • lock
    实例化 ReentrantLock,调用lock(),最后调用unlock()

lock 与synchronized异同?
相同:都可以用来解决线程安全问题
不同:1:synchronized机制在执行完同步代码之后,自动释放同步监视器。lock需要手动的启动和结束同步
2:lock只有代码块锁,synchronized有代码块锁和方法锁
3:使用lock锁,jvm将花费较少的时间调度线程,性能更好。并且具有更好的扩展性

posted @ 2021-08-29 18:39  rmxob  阅读(74)  评论(0)    收藏  举报