Java的线程调度
----------------------线程优先级、休眠、让步、插队
1、线程的优先级
线程的优先级用整数 1~~10表示,数字越大,优先级越高。
默认普通优先级为 5
No. | 定 义 | 描 述 | 表示的常量 |
1 | public static final int MIN_PRIORITY | 最低优先级 | 1 |
2 | public static final int NORM_PRIORITY | 中等优先级,是线程的 默认优先级 | 5 |
3 | public static final int MAX_PRIORITY | 最高优先级 |
2、线程的休眠
使用静态方法sleep() ,可以使正在执行的线程进入休眠状态,即从 运行态 进入 阻塞态
sleep()可以无参 亦可以重载
sleep() 方法需要声明抛出InteruptedException 异常,中断异常
try{
Thread.sleep(2000) //休眠2秒
}catch(InterruptedException e){
e.printStackTRrace();
}
3、线程让步
使用yield() 方法可以实现线程的让步,和sleeep()方法相似,都可以让线程暂停
区别:yeild()方法不会阻塞该线程,它 让线程从 运行态进入就绪态
条件:
两个线程的优先级相同
调用该方法将CPU礼让给具有与当前线程相同优先级的线程。如Thread.currentThread( ).yield( ) ;
如果此类线程都不是Runnable状态,yield( )方法将什么也不做。
4、线程的插队
使用join() 方法。当某个线程调用其他线程的join() 方法时,调用的线程将被阻塞,直到被加入的线程完全完成后才会继续运行
一个线程A在占有CPU资源期间,可以让其它线程调用join()和本线程联合,
如:B.join( ); 称A在运行期间联合了B。
如果线程A在占有CPU资源期间一旦联合B线程,那么A线程将立刻中断执行,一直等到它联合的线程B执行完毕,A线程再重新排队等待CPU资源,以便恢复执行。
如果A准备联合的B线程已经结束,那么
B.join()不会产生任何效果。