java线程

来源:互联网 发布:人的音域 知乎 编辑:程序博客网 时间:2024/05/01 04:12

 一.interrupt()方法

(1)有什么作用

打断一个处于阻塞状态的线程。具体就是调用了Object.wait()或Thread的join()或Thread.sleep()的线程再调用interrupt()方法会抛出一个InterruptedException,提前结束阻塞状态,如果线程没有进入阻塞状态调用interrupt()方法没有任何效果。

二.线程状态

(1)新建状态:new线程之后。

(2)就绪状态:调用start()方法之后,进入可运行线程池,等待cpu调度。

(3)运行状态:获取cpu调度权之后,线程开始执行。

(4)阻塞状态:因为某种原因放弃cpu使用权,暂时停止运行,直到进入就绪状态才有机会进入运行状态,阻塞分三种。

<1>.等待阻塞:调用wait()方法后进入等待线程池。

<2>.同步阻塞:线程在获取对象同步锁时发现已被其他线程获取,进入锁线程池。

<3>.其他阻塞:调用sleep(),join()方法或者io阻塞,等到超时或其他原因线程重新进入就绪状态。

(5)死亡状态:线程执行完毕或因异常退出,线程生命周期结束。

三.线程状态图


四.join()方法

在A线程中的某处调用了B线程的join()方法,则A线程从调用处开始阻塞,直到B线程执行完毕A线程才会继续执行。简而言之就是使异步执行的线程变成同步执行。

五.yield()方法

当前线程放弃cpu使用权,从运行状态恢复到就绪状态。

六.wait()和notify()/notifyAll()方法

只能在同步方法中调用,wait()释放同步锁(sleep(),yield()不会释放),同时线程进入阻塞状态,notify()/notifyAll()或者超时会让线程恢复执行。


0 0
原创粉丝点击