📄 right6_1_3.htm
字号:
<html><head><title>JAVA编程语言</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><link rel="stylesheet" href="../../../css/text.css" type="text/css"></head><body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" ><table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF"> <tr> <td valign="top"> <table width="94%" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#FFFFFF"> <tr> <td valign="top"> <p> <span class="pt9-black"> 抢先式调度又分为:时间片方式和独占方式。在时间片方式下,当前活动线程执行完当前时间片后,如果有其他处于就绪状态的相同优先级的线程,系统会将执行权交给其他就绪态的同优先级线程;当前活动线程转入等待执行队列,等待下一个时间片的调度。<br> <br> 在独占方式下,当前活动线程一旦获得执行权,将一直执行下去,直到执行完毕或由于某种原因主动放弃CPU,或者是有一高优先级的线程处于就绪状态。<br> <br> 下面几种情况下,当前线程会放弃CPU:<br> <br> 1. 线程调用了yield() 或sleep() 方法主动放弃; <br> <br> 2. 由于当前线程进行I/O 访问,外存读写,等待用户输入等操作,导致线程阻塞;或者是为等候一个条件变量,以及线程调用wait()方法; <br> <br> 3. 抢先式系统下,由高优先级的线程参与调度;时间片方式下,当前时间片用完,由同优先级的线程参与调度。 <br> </span><br> <span class="pt9-black"> </span><span class="zhongdian">线程的优先级<a name="01"></a></span><span class="pt9-black"><br> <br> 线程的优先级用数字来表示,范围从1到10,即Thread.MIN_PRIORITY到Thread.MAX_PRIORITY。一个线程的缺省优先级是5,即Thread.NORM_PRIORITY。下述方法可以对优先级进行操作:<br> <br> int getPriority();<font color="339900"> //得到线程的优先级</font><br> void setPriority(int newPriority); <br> <font color="339900">//当线程被创建后,可通过此方法改变线程的优先级</font></span></p> <p class="pt9-black"> 例6.3中生成三个不同线程,其中一个线程在最低优先级下运行,而另两个线程在最高优先级下运行。<br> <br> <span class="pt9-black"><img src="../../../images/html/liti.gif" width="38" height="38" align="absbottom" title="例题"> <font color="000099">例6.3</font></span><br> class ThreadTest{<br> public static void main( String args [] ) {<br> Thread t1 = new MyThread("T1");<br> t1.setPriority( Thread.MIN_PRIORITY ); <font color="339900">//设置优先级为最小</font><br> t1.start( );<br> Thread t2 = new MyThread("T2");<br> t2.setPriority( Thread.MAX_PRIORITY );<font color="339900"> //设置优先级为最大</font><br> t2.start( );<br> Thread t3 = new MyThread("T3");<br> t3.setPriority( Thread.MAX_PRIORITY ); <font color="339900">//设置优先级为最大</font><br> t3.start( );<br> }<br> }</p> <p class="pt9-black"> class MyThread extends Thread {<br> String message;<br> MyThread ( String message ) {<br> this.message = message;<br> }<br> public void run() {<br> for ( int i=0; i<3; i++ )<br> System.out.println( message+" "+getPriority() ); <font color="339900"><br> //获得线程的优先级</font><br> }<br> }</p> <p><span class="pt9-black"> <font color="#FF0000">运行结果:</font><br> T2 10<br> T2 10<br> T2 10<br> T3 10<br> T3 10<br> T3 10<br> T1 1<br> T1 1<br> T1 1<br> <br> <font color="000099"><b>注意:</b>并不是在所有系统中运行Java程序时都采用时间片策略调度线程,所以一个线程在空闲时应该主动放弃CPU,以使其他同优先级和低优先级的线程得到执行。</font></span></p> </td> </tr> </table> </td> </tr></table></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -