Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。
这里要明确的一点,不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制。
线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休眠一定时间后,线程会苏醒,进入准备状态等待执行。
线程休眠的方法是Thread.sleep(long millis) 和Thread.sleep(long millis, int nanos) ,均为静态方法,那调用sleep休眠的哪个线程呢?简单说,哪个线程调用sleep,就休眠哪个线程。
/**
* Java线程:线程的调度-休眠
*
* @author leizhimin 2009-11-4 9:02:40
*/
public class Test {
public static void main(String[] args) {
Thread t1 = new MyThread1();
Thread t2 = new Thread(new MyRunnable());
t1.start();
t2.start();
}
}
class MyThread1 extends Thread {
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println("线程1第" + i + "次执行!");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyRunnable implements Runnable {
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println("线程2第" + i + "次执行!");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
* Java线程:线程的调度-休眠
*
* @author leizhimin 2009-11-4 9:02:40
*/
public class Test {
public static void main(String[] args) {
Thread t1 = new MyThread1();
Thread t2 = new Thread(new MyRunnable());
t1.start();
t2.start();
}
}
class MyThread1 extends Thread {
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println("线程1第" + i + "次执行!");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyRunnable implements Runnable {
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println("线程2第" + i + "次执行!");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
线程2第0次执行!
线程1第0次执行!
线程1第1次执行!
线程2第1次执行!
线程1第2次执行!
线程2第2次执行!
Process finished with exit code 0
线程1第0次执行!
线程1第1次执行!
线程2第1次执行!
线程1第2次执行!
线程2第2次执行!
Process finished with exit code 0
从上面的结果输出可以看出,无法精准保证线程执行次序。
相关推荐
Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的调度-守护线程 Java线程:线程的同步-同步方法 Java线程:线程的同步-同步块 Java...
Java线程:线程的调度-休眠 Java线程:volatile关键字 Java线程:新特征-线程池 一、固定大小的线程池 二、单任务线程池 三、可变尺寸的线程池 四、延迟连接池 五、单任务延迟连接池 六、自定义线程池 Java...
线程调度涉及到如何安排线程的执行顺序,包括但不限于: 1. **休眠**:使当前正在执行的线程暂停一段时间。 2. **优先级**:为线程设置优先级,优先级较高的线程更容易获得执行机会。 3. **让步**:主动放弃当前...
#### 七、Java线程:线程的调度 - **线程的调度策略** 包括休眠、优先级设置、让步等,这些都是控制线程执行顺序的重要手段。 1. **休眠**:通过 `Thread.sleep(long millis)` 方法使当前线程暂停执行指定的时间...
3. **运行状态(Running)**:线程调度程序从可运行池中选择了一个线程作为当前线程执行时,线程就处于运行状态。需要注意的是,运行状态并不意味着线程一定会立即得到CPU资源,而是表示线程有资格被选中运行。 4. *...
- Java线程调度主要依赖于操作系统的调度机制。 - 线程的优先级、让步(`yield`)、休眠(`sleep`)等方法可以影响线程的执行顺序。 - 守护线程(`Daemon Thread`)是一种特殊的线程类型,它们主要用于后台服务,如垃圾...
- **线程调度**:包括休眠、优先级调整、线程让步、合并线程以及守护线程的概念。 - **并发协作**:深入探讨了生产者-消费者模型和死锁问题,提供了理解和避免死锁的策略。 - **新特征**:Java 5引入的并发工具,如`...
本篇总结涵盖了Java多线程的基础概念、创建与启动、线程调度、同步与协作以及新特性。 **一、Java线程:概念与原理** 1. **线程与进程**: - **进程**:是操作系统资源分配的基本单位,每个进程都有独立的内存...
- 在Java中可以通过设置线程的优先级来指定线程调度的优先顺序,优先级用数字表示,范围从1到10,其中10为最高优先级。 9. 线程的异常处理: - 在多线程程序中,如果线程抛出了未捕获的异常,该线程会终止,但...
在Java多线程编程中,面试题常常涉及到线程的基本概念、同步与异步的区别、线程同步方法以及Java提供的并发工具类。下面我们将深入探讨这些知识点。 1. **线程间的协作**: - `sleep()` 和 `wait()` 的区别:`...
10. **线程调度算法**: - 分时调度:每个线程获得一定时间片,轮转执行。 - 抢占式调度:根据线程优先级决定执行顺序,优先级高的先执行。 11. **线程终止条件**: - 时间片用完。 - 高优先级线程出现。 - I/...
线程休眠是Java中实现线程调度的一个重要工具,它允许当前运行的线程暂停执行,将CPU资源释放给其他线程。这有助于避免单个线程过度占用CPU,从而改善整体程序的响应性和效率。线程休眠由`Thread.sleep(long millis,...
这是因为Java线程调度采用了非确定性的抢占式调度策略,即使优先级较高的线程也可能因为其他原因(如线程休眠、同步锁等)被暂时挂起,让其他线程有机会执行。 Java线程的优先级分为三个级别: 1. **NORM_PRIORITY*...
- **线程调度**:操作系统负责决定何时切换线程执行,Java提供了Thread.yield()和Thread.sleep()方法影响线程调度。 6. **实战示例** - **创建动画线程**:定义一个循环更新动画状态的线程,如旋转图片、移动物体...
尽管不推荐,但可以通过`Thread.sleep()`方法让主线程休眠一段时间来等待子线程。这种方法的问题在于,睡眠时间必须预估,且不准确,可能导致主线程提前唤醒或过度等待。 ### 方法二:`Thread.join()`方法 `Thread....
2. **线程创建**:Java提供两种方式创建线程,一是直接继承Thread类并重写run()方法,二是实现Runnable接口并定义run()方法,然后通过Thread类的构造函数将Runnable对象传递进去。 3. **线程交互**:线程之间的通信...
4. **线程调度**:操作系统负责线程调度,决定哪些线程可以获取CPU时间片并执行。 5. **线程同步与互斥**:当多个线程访问共享资源时,为了防止数据不一致,需要采用同步机制,例如使用`synchronized`关键字或者显式...