`
mmdev
  • 浏览: 12926619 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

线程状态的转换

 
阅读更多

线程离开运行状态的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线程:线程状态的转换

    初学者学习java多线程的必备良师啊!...内容包含:线程的状态及状态之间的转换 线程的优先级 线程的几大常用方法! 申明: 本文出自 “熔 岩” 博客,本人从百度文库转载而来! 大家都尊重一下 作者的版权!

    Java线程状态转换.pdf

    Java线程状态转换.pdf 学习资料 复习资料 教学资源

    Java线程状态转换关系实例解析

    主要介绍了Java线程状态转换关系实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    线程状态转换

    对于操作系统来说线程只是一小部分,但是在做分布式计算,云计算的时候,线程的优越性就可以体现了,所以掌握线程很重要

    线程状态图

    线程状态图 包含了从创建到消亡的各种流程以及所有状态

    Java线程状态流转图

    Java线程状态流转图

    Java线程:线程状态的转换.pdf

    Java线程:线程状态的转换.pdf

    Java线程:线程状态的转换[参考].pdf

    Java线程:线程状态的转换[参考].pdf

    samjustin8231#JavaGuide#线程状态和基本操作1

    创建线程Java创建线程的四种方式线程状态转换当一个线程执行了start方法后,不代表这个线程就会立即被执行,只代表这个线程处于可运行的状态,最终由OS的线程调

    在java中的线程的转换图

    在java中的线程转换的总描述,结合了所有的java有关线程的状态转移图

    python 线程的五个状态

    当程序中包含多个线程时,CPU 不是一直被特定的线程霸占,...当位于新建状态的线程调用 start() 方法后,该线程就转换到就绪状态。 所谓就绪,就是告诉 CPU,该线程已经可以执行了,但是具体什么时候执行,取决于 CPU

    java多线程编程总结

    Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的调度-...

    Java多线程编程总结

    Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的...

    操作系统实验41

    2.线程由运行状态进入就绪状态 3.线程由就绪状态进入运行状态 4.线程由运行状态进入阻塞状态 2. 打开ps/sched.c文件,在与线程状态转换相关的函数中

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【多线程】线程状态转换 74 【多线程】线程的调度 75 线程优先级 75 sleep 76 wait 76 yield 77 join 78 notify notifyAll 78 【多线程】sleep()和wait()分别是哪个类的方法,有什么区别? 79 【多线程】sleep()和...

    java多线程笔记

    四、线程的状态转换和生命周期 4 Java线程:创建与启动 7 Java线程:线程名称的设定及获取 10 Java线程:线程栈模型与线程的变量 12 Java线程:线程的调度-休眠 13 Java线程:线程的调度-优先级 16 Java线程:线程的...

    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 运行生产者/消费...

Global site tag (gtag.js) - Google Analytics