java多线程的相关知识
一、线程的状态
根据上图描述,线程大致流程如下:
1.线程在调用start()方法后,会进入就绪状态,等待时间片轮转调度
2.cpu时间片轮转调度到该线程了,线程会通过join()方法进入运行状态
3-1.当线程调用了sleep()方法让线程进入睡眠,从而进入阻塞状态,暂停运行
3-2.sleep()方法时间到了,会再次回到就绪状态,等待时间片轮转调度
4-1.当线程调用了wait()方法让线程挂起,从而进入阻塞状态
4-2.当调用notify()或notifyAll()方法,会回到就绪状态,等待时间片轮转调度
5.当时间片轮转到下一个时间片时,线程会让出cpu的执行权,调用yield()方法进入就绪状态
6.当线程执行完毕或者调用stop()方法,则进入死亡状态
二、线程的方法
1.start()方法
启动线程,让线程进入就绪状态等待cpu调度
2.sleep()方法
sleep()方法的用处是将线程暂停,进入堵塞状态。
注意:
1).sleep()方法进入阻塞状态之后不会释放锁
2).sleep()是静态方法,只能操作当前的线程,就是不能在A线程暂停B线程。
3).当线程sleep时间结束后会回到就绪状态
3.wait()方法
//TODO
4.interrupt()方法
给线程设置一个中断状态,用于在线程中判断是否可以中断线程
5.notify()方法
//TODO
6.notifyAll()方法
//TODO
7.yield()方法
将线程从运行状态改为就绪状态,当cpu时间片过期,就会调用此方法将线程从运行状态转变为就绪状态
8.join()方法
//TODO
9.stop()方法
不管什么情况,强制中断线程 (不推荐使用)
三、线程的优先级
线程优先级可以通过调用setPriority()的方法来设置,范围是1—10,缺省值为5。
注意: 这个优先级可能会根据不同的操作环境或者java虚拟机而有所不同,所以不用特意设置。
四、守护线程
和主线程共死的线程,如GC线程。可以通过setDaemon(boolean)方法去设置。