Java线程的讨论与应用 - 编程入门网
是说,它们己经被放到某一队列等待执行。处于就绪状态的线程何时可真正执行,取决于线程优先级以及队列的当前状况。线程的优先级如果相同,将遵循"先来先服务"的调度原则。
线程依据自身优先级进入等待队列的相应位置。某些系统线程具有最高优先级,这些最高优先级线程一旦进入就绪状态,将抢占当前正在执行的线程的处理器资源,当前线程只能重新在等待队列寻找自己的位置.这些具有最高优先级的线程执行完自己的任务之后,将睡眠一段时间,等待被某一事件唤醒.一旦被唤,这些线程就又开始抢占处理器资源。这些最高优先级线程通常用来执行一些关键性任务,如屏幕显示。 低优先级线程需等待更长的时间才能有机会运行。由于系统本身无法中止高优先级线程的执行,因此,如果你的程序中用到了优先级较高的线程对象,那么最好不时让这些线程放弃对处理器资源的控制权,以使其他线程能够有机运行。 Running "Running"(运行)状态表明线程正在运行,该线己经拥有了对处理器的控制权,其代码目前正在运行。这个线程将一直运行直到运行完毕,除非运行过程的控制权被一优先级更高的线程强占。 综合起来,线程在如下3种情形之下将释放对处理器的控制权: 1.主动或被动地释放对处理器资源的控制权。这时,该线程必须再次进入等待队列,等待其他优先级高或相等线程执行完毕。 2.睡眠一段确定的时间,不进入等待队列。这段确定的时间段到期之后,重新开始运行。 3.等待某一事件唤醒自己。 Blocked 一个线程如果处于"Blocked"(堵塞)状态,那么暂时这个线程将无法进入就绪队列。处于堵塞状态的线程通常必须由某些事件才能唤醒。至于是何种事件,则取决于堵塞发生的原因:处于睡眠中的线程必须被堵塞一段固定的时间;被挂起、或处于消息等待状态的线程则必须由一外来事件唤醒。 Dead Dead表示线程巳退出运行状态,并且不再进入就绪队列.其中原因可能是线程巳执行完毕(正常结束),也可能是该线程被另一线程所强行中断(kill)。 Java线程的讨论与应用(2)时间:2010-12-08三、创建和使用线程的基本方法 1.线程的产生 在Java语言中,可采用两种方式产生线程:一是实现一个Runnable界面,二是扩充一个Thread类.java.lang中定义了一个直接从根类Object中派生的Thread类.所有以这个类派生的子类或间接子类,均为线程。在这种方式中,需要作为一个线程执行的类只能继承、扩充单一的父类。下面的例子通过扩充Thread类,用该线程自己的实现来覆盖Thread.run(),产生一个新类Counter。run()方法是Counter类线程所作的全部操作.
实现Runnable界面是最常用的产生线程的方法,它打破了扩充Thread类方式的限制。 Java语言源码中,Runnable界面只包含了一个抽象方法,其定义如下:
所有实现了Runnable界面的类的对象都可以以线程方式执行.下面的例子产生与上面例子相同的类.可以看到counter类中使用了一个Thread类的变量.
2、基本方法 .publicsynchronizedvoidstart() 启动线程对象,调用其run()方法,随即返回。 .pubilcfinalvoidstop() 停止线程的执行。 .publicfinalvoidresume() 唤醒被挂起的线程。只在调用suspend()之后有效。 .publicfinalvoidsuspend() 挂起线程的执行。 .publicstaticvoidyield() 暂时中止当前正在执行的线程对象的运行。若存在其他线程,则随后调用下一个线程。 .publicstaticvoidsleep(longmills)throwsInterruptedException 使当前正处运行状态的线程睡眠mills毫秒 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |