线程离开运行状态的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线程:线程状态的转换 #### 一、线程状态及其转换 ...通过以上分析,我们可以看到Java线程状态转换的基本原理以及如何利用线程状态来控制线程的行为,这对于开发高性能、高可靠性的并发程序至关重要。
Java线程状态转换是Java多线程编程中的关键概念,对于理解和优化并发程序至关重要。Java线程在其生命周期中经历多种状态,这些状态之间的转换是由线程调度器根据特定的策略来决定的。以下是对Java线程状态转换的详细...
多线程线程状态转换图
Java线程状态流转图中,以下方法与线程状态转换相关: * Object.wait():使线程从RUNNABLE状态转换到WAITING状态。 * Object.notify():使线程从WAITING状态转换到RUNNABLE状态。 * Object.notifyAll():使多个线程...
Java线程状态转换关系实例解析 Java线程状态转换关系实例解析是Java多线程编程中的一种重要概念,它指的是Java线程在不同的状态之间的转换关系。了解这些状态转换关系可以帮助开发者更好地编写多线程程序,避免线程...
在多线程环境中,合理地控制线程状态转换可以提高程序的效率和正确性。 例如,下面的代码展示了如何使用`sleep()`方法来实现线程间的交替执行: ```java public class MyThread extends Thread { private static ...
线程状态转换是一个复杂的过程,涉及到线程调度、锁的管理等多个方面。了解这些状态和转换机制,有助于编写高效、可控的多线程程序。在实际编程中,应根据需求合理利用这些状态控制,确保线程间的协作和资源利用达到...
Java中的线程状态转换是Java多线程编程中一个至关重要的概念。理解这些状态转换有助于开发者更好地管理和控制并发执行的任务,避免线程安全问题。线程在生命周期中会经历多种状态,包括新建(New)、可运行...
本文档提供了 Java 多线程编程的详细教程,涵盖了多线程的概念、原理、创建、启动、同步、锁、线程池、线程状态转换、线程交互、线程调度、volatile 关键字、信号量、阻塞队列、条件变量等知识点。 一、Java 多线程...
本文将深入探讨Java多线程的核心概念、创建方式、线程状态转换、线程调度以及线程优先级调整。 首先,理解线程的基本概念至关重要。线程是进程中的一个执行单元,是操作系统调度的基本单位。与进程相比,线程更轻...
线程状态转换是操作系统内核调度的基础,尤其在多线程环境中,处理器资源的高效利用和任务并行处理能力的提升都依赖于这种转换。 实验原理中提到,EOS操作系统将线程作为处理器调度的基本单元。进程创建时,系统会...
多线程思维导图和XMind文件可能包含了以下内容:线程的创建与销毁、线程状态转换、同步机制详解、线程安全的数据结构、线程池的使用、线程间通信实例、并发设计模式以及解决并发问题的最佳实践等。 通过学习和掌握...
在VC++编程中,线程是并发执行的基本单元,它使得程序可以同时处理多个任务。...理解线程状态转换和使用适当的同步机制是多线程编程的关键。通过熟练掌握这些概念和API,开发者可以编写出高效、可靠的多线程应用程序。
【线程状态转换】 线程状态之间可以进行如下转换: 1. 创建状态 -> 就绪状态(调用`start()`) 2. 就绪状态 -> 运行状态(CPU分配) 3. 运行状态 -> 就绪状态(被其他线程抢占或`yield()`) 4. 运行状态 -> 阻塞状态...
- 分析了线程的生命周期,包括初始化、运行、冻结和死亡状态,并深入探讨了线程状态转换的内部机制。 4. 线程的同步机制 - 介绍了同步代码块和同步方法的用法,以及this锁和static锁的区别和应用场景。 - 讨论了...
本文将深入探讨Java中的多线程概念、实现方式、线程状态转换、线程调度、线程同步以及数据传递等相关知识。 1. **扩展`java.lang.Thread`类** 创建线程的一种方式是通过扩展`Thread`类。在`Thread`类的子类中,...
线程状态转换图可以help我们更好地理解线程的生命周期。 在多线程编程中,经常会遇到的问题包括死锁、程序性能低下、对象难以被删除等问题。为了解决这些问题,我们需要了解多线程编程的要点,包括对象管理、原子...