`
xiasheng
  • 浏览: 70844 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

线程的调度—休眠

阅读更多
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();
                        }
                }
        }
}
 
线程2第0次执行!
线程1第0次执行!
线程1第1次执行!
线程2第1次执行!
线程1第2次执行!
线程2第2次执行!

Process finished with exit code 0
 
从上面的结果输出可以看出,无法精准保证线程执行次序。
分享到:
评论

相关推荐

    线程调度的优先级

    这是因为Java线程调度采用了非确定性的抢占式调度策略,即使优先级较高的线程也可能因为其他原因(如线程休眠、同步锁等)被暂时挂起,让其他线程有机会执行。 Java线程的优先级分为三个级别: 1. **NORM_PRIORITY*...

    Java线程调度之线程休眠用法分析

    线程休眠是Java中实现线程调度的一个重要工具,它允许当前运行的线程暂停执行,将CPU资源释放给其他线程。这有助于避免单个线程过度占用CPU,从而改善整体程序的响应性和效率。线程休眠由`Thread.sleep(long millis,...

    唤醒阻塞休眠线程示例

    休眠有助于线程调度,让其他线程有机会获取CPU时间片。 4. **避免使用TerminateXXX方法**:直接终止线程(如Java中的`Thread.stop()`)可能会导致数据不一致、资源泄露等问题。因此,推荐使用协同终止(Cooperative...

    java多线程设置线程休眠案例

    `ScheduledExecutorService`提供了更强大的线程调度功能,但其使用相对复杂,适合对线程管理有更高需求的场景。 总之,通过Java的多线程和线程休眠机制,开发者可以创建复杂的并发应用程序,优化系统资源的利用,...

    pintos 线程休眠实现

    《Pintos线程休眠实现详解》 在操作系统领域,线程的管理是至关重要的一个环节,它关乎系统的并发性和资源调度效率。Pintos项目是一个为教学目的设计的简单操作系统,它提供了多线程的支持。在这个项目中,线程休眠...

    线程池使用介绍用程序可以有多个线程,这些线程在休眠状态中需要耗费大量时间来等待事件发生。其他线程可能进入睡眠状态,并且仅定期被唤醒以轮循更改或更新状态信息,然后再次进入休眠状态

    在应用程序中,多个线程可能会处于等待状态,等待某个事件的发生或者进行周期性的状态检查,这样的操作会消耗资源,因为线程即使在休眠也需要占用内存。线程池通过集中管理这些线程,减少了创建和销毁线程的开销,...

    多线程动态优先数调度

    这个课程设计作业采用Java语言实现,说明了如何在Java环境下创建和管理多个执行线程,并且引入了动态优先级的概念来优化线程调度。让我们深入探讨这个话题。 首先,多线程是指在一个程序中同时运行多个独立的执行...

    休眠与唤醒1

    它创建了3个线程,每个线程休眠5次,但是测试的重点在于所有线程是否能在同一时间被唤醒,以确保线程调度的精确性。 线程的休眠与唤醒机制通常涉及以下几个关键组件: - **线程状态管理**:操作系统需要跟踪线程的...

    Java多线程编程总结

    Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的调度-守护线程 Java线程:线程的同步-同步方法 Java线程:线程的同步-同步块 Java...

    java面试题之多线程

    `sleep()` 让线程暂时休眠,不释放锁。 7. **线程状态**: - 线程有四种基本状态:运行(Runnable)、就绪(Blocked)、挂起(Waiting/Timed_Waiting)和结束(Terminated)。线程状态的变化受到调度器的影响。 8...

    VC++创建多线程以及应用

    下面将详细讨论VC++中创建多线程、线程池、线程调度以及线程同步的相关知识点。 首先,**创建多线程** 是指在一个进程中同时执行多个独立的代码段,每个代码段称为一个线程。在VC++中,可以通过`_beginthreadex`或`...

    Java多线程教程资料(强烈推荐).docx

    本文档提供了 Java 多线程编程的详细教程,涵盖了多线程的概念、原理、创建、启动、同步、锁、线程池、线程状态转换、线程交互、线程调度、volatile 关键字、信号量、阻塞队列、条件变量等知识点。 一、Java 多线程...

    7--实验7.doc

    Java中的线程调度是操作系统层面的,包括**抢占式调度**(优先级更高的线程可能抢占正在运行的线程)和**时间片轮转**(每个线程分配一定时间片执行)。在这个实验中,线程通过`sleep()`方法让当前线程休眠,从而...

    Java工程师线程试题

    这两种方式创建的线程都可以通过`start()`方法启动,但它们不能交叉执行,因为Java的线程调度是由JVM控制的。 3. **临界区**:临界区是指一段只能被一个线程访问的代码区域,通常用于保护共享资源。Java中,可以...

    线程封装类

    - **线程优先级**:可以通过设置线程优先级来影响线程调度,但过度依赖优先级可能导致优先级反转或死锁问题,所以应谨慎使用。 - **异常处理**:确保线程函数有适当的异常处理机制,以防异常未被捕获导致程序崩溃。...

    java多线程

    - 线程有优先级,但不保证高优先级线程一定先执行,具体取决于线程调度策略。 - 优先级范围从1(`Thread.MIN_PRIORITY`)到10(`Thread.MAX_PRIORITY`),默认是5(`Thread.NORM_PRIORITY`)。 9. **线程调度器与...

    Java线程:线程状态的转换

    3. **运行状态(Running)**:线程调度程序从可运行池中选择了一个线程作为当前线程执行时,线程就处于运行状态。需要注意的是,运行状态并不意味着线程一定会立即得到CPU资源,而是表示线程有资格被选中运行。 4. *...

    Java-多线程教学文档

    Java线程调度包括线程的休眠、优先级、让步、合并和守护线程等策略。线程优先级可以调整线程执行的相对顺序,但不保证绝对的执行顺序。守护线程是一种服务线程,当所有非守护线程结束时,JVM会退出,即使仍有守护...

    JAVA多线程实验报告

    Java中线程调度主要有两种策略:抢占式调度(Preemptive Scheduling)和协作式调度(Cooperative Scheduling)。默认情况下,Java采用抢占式调度,即优先级较高的线程可能会抢占CPU资源。线程的优先级可以通过`set...

Global site tag (gtag.js) - Google Analytics