线程状态的转换
来源:互联网 发布:mysql官方文档有问题 编辑:程序博客网 时间:2024/04/30 09:19
线程离开运行状态的3种方法:
1、调用Thread.sleep():使当前线程睡眠至少多少毫秒(尽管它可能在指定的时间之前被中断)。
睡眠的实现:调用静态方法。
try {
Thread.sleep(123);
} catch (InterruptedException e) {
e.printStackTrace();
}
睡眠的位置:为了让其他线程有机会执行,可以将Thread.sleep()的调用放线程run()之内。这样才能保证该线程执行过程中会睡眠。
2、调用Thread.yield():不能保障太多事情,尽管通常它会让当前运行线程回到可运行性状态,使得有相同优先级的线程有机会执行。
yield()方法的作用是:暂停当前正在执行的线程对象,并执行其他线程。
结论:yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。
/**
* Java线程:线程的调度-让步
*
* @author leizhimin 2009-11-4 9:02:40
*/
public class Test {
public static void main(String[] args) {
Threadt1 = new MyThread1();
Threadt2 = new Thread(new MyRunnable());
t2.start();
t1.start();
}
}
class MyThread1 extends Thread {
public void run() {
for (int i = 0; i < 10;i++) {
System.out.println("线程1第" + i + "次执行!");
}
}
}
class MyRunnable implements Runnable {
public void run() {
for (int i = 0; i < 10;i++) {
System.out.println("线程2第" + i + "次执行!");
Thread.yield();
}
}
}
3、调用join()方法:保证当前线程停止执行,直到该线程所加入的线程完成为止。然而,如果它加入的线程没有存活,则当前线程不需要停止。
除了以上三种方式外,还有下面几种特殊情况可能使线程离开运行状态:
1、线程的run()方法完成。
2、在对象上调用wait()方法(不是在线程上调用)。
3、线程不能在对象上获得锁定,它正试图运行该对象的方法代码。
4、线程调度程序可以决定将当前运行状态移动到可运行状态,以便让另一个线程获得运行机会,而不需要任何理由。
- 线程状态的转换
- 线程状态的转换
- 线程的状态转换
- 线程的状态转换
- 线程状态的转换
- 线程的状态转换
- 线程的状态转换
- 线程状态的转换
- 线程的状态转换
- 线程状态的转换
- 线程的状态转换
- 线程的状态转换
- 【线程的状态转换】
- 线程的状态转换
- Java线程的状态转换
- JAVA:线程状态的转换
- JAVA:线程状态的转换
- Java线程的状态转换
- iphone开发-SQLite数据库使用
- 根据视频和平时所学知识,利用循环的嵌套编写了菱形与倒三角形。熟悉循环的嵌套
- java开源缓存框架和memcache分析
- android中,如何创建Frame Animation?
- sqlite 操作简明教程
- 线程状态的转换
- ARM程序开发中的冗余局部变量问题
- iphone实现xml的post传递,并且接收数据
- [linux程序设计笔记]第7章:数据管理(省略了后面的数据库那个)
- 对Canvas和Matrix的理解
- CEdit 用做滚屏显示
- objective-c property
- SharePoint向InfoPath 2007表单传递参数
- RHEL4-VNC服务配置