线程离开运行状态的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线程状态转换.pdf 学习资料 复习资料 教学资源
主要介绍了Java线程状态转换关系实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
对于操作系统来说线程只是一小部分,但是在做分布式计算,云计算的时候,线程的优越性就可以体现了,所以掌握线程很重要
线程状态图 包含了从创建到消亡的各种流程以及所有状态
Java线程状态流转图
Java线程:线程状态的转换.pdf
Java线程:线程状态的转换[参考].pdf
创建线程Java创建线程的四种方式线程状态转换当一个线程执行了start方法后,不代表这个线程就会立即被执行,只代表这个线程处于可运行的状态,最终由OS的线程调
在java中的线程转换的总描述,结合了所有的java有关线程的状态转移图
当程序中包含多个线程时,CPU 不是一直被特定的线程霸占,...当位于新建状态的线程调用 start() 方法后,该线程就转换到就绪状态。 所谓就绪,就是告诉 CPU,该线程已经可以执行了,但是具体什么时候执行,取决于 CPU
Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的调度-...
Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的...
2.线程由运行状态进入就绪状态 3.线程由就绪状态进入运行状态 4.线程由运行状态进入阻塞状态 2. 打开ps/sched.c文件,在与线程状态转换相关的函数中
【多线程】线程状态转换 74 【多线程】线程的调度 75 线程优先级 75 sleep 76 wait 76 yield 77 join 78 notify notifyAll 78 【多线程】sleep()和wait()分别是哪个类的方法,有什么区别? 79 【多线程】sleep()和...
四、线程的状态转换和生命周期 4 Java线程:创建与启动 7 Java线程:线程名称的设定及获取 10 Java线程:线程栈模型与线程的变量 12 Java线程:线程的调度-休眠 13 Java线程:线程的调度-优先级 16 Java线程:线程的...
11.2.3 线程状态转换 11.2.4 等待线程结束 11.3 线程调度 11.4 线程同步 11.4.1 同步概念 11.4.2 同步格式 11.4.3 同步应用 11.5 线程通信 11.5.1 生产者/消费者 11.5.2 共享队列 11.5.3 运行生产者/消费...