`
wenson
  • 浏览: 1052183 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java线程:线程的调度-休眠

    博客分类:
  • Java
 
阅读更多
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
 
从上面的结果输出可以看出,无法精准保证线程执行次序。

本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/221790

分享到:
评论

相关推荐

    Java多线程编程总结

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

    java线程详解

    Java线程:线程的调度-休眠 Java线程:volatile关键字 Java线程:新特征-线程池 一、固定大小的线程池 二、单任务线程池 三、可变尺寸的线程池 四、延迟连接池 五、单任务延迟连接池 六、自定义线程池 Java...

    Java多线程编程经验

    线程调度涉及到如何安排线程的执行顺序,包括但不限于: 1. **休眠**:使当前正在执行的线程暂停一段时间。 2. **优先级**:为线程设置优先级,优先级较高的线程更容易获得执行机会。 3. **让步**:主动放弃当前...

    java多线程编程总结

    #### 七、Java线程:线程的调度 - **线程的调度策略** 包括休眠、优先级设置、让步等,这些都是控制线程执行顺序的重要手段。 1. **休眠**:通过 `Thread.sleep(long millis)` 方法使当前线程暂停执行指定的时间...

    Java线程:线程状态的转换

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

    Java多线程运算集合

    - Java线程调度主要依赖于操作系统的调度机制。 - 线程的优先级、让步(`yield`)、休眠(`sleep`)等方法可以影响线程的执行顺序。 - 守护线程(`Daemon Thread`)是一种特殊的线程类型,它们主要用于后台服务,如垃圾...

    Java_多线程编程线程:大总结

    - **线程调度**:包括休眠、优先级调整、线程让步、合并线程以及守护线程的概念。 - **并发协作**:深入探讨了生产者-消费者模型和死锁问题,提供了理解和避免死锁的策略。 - **新特征**:Java 5引入的并发工具,如`...

    JAVA多线程总结

    本篇总结涵盖了Java多线程的基础概念、创建与启动、线程调度、同步与协作以及新特性。 **一、Java线程:概念与原理** 1. **线程与进程**: - **进程**:是操作系统资源分配的基本单位,每个进程都有独立的内存...

    7Java第七单元练习题-Java多线程机制[参考].pdf

    - 在Java中可以通过设置线程的优先级来指定线程调度的优先顺序,优先级用数字表示,范围从1到10,其中10为最高优先级。 9. 线程的异常处理: - 在多线程程序中,如果线程抛出了未捕获的异常,该线程会终止,但...

    java面试题之多线程

    在Java多线程编程中,面试题常常涉及到线程的基本概念、同步与异步的区别、线程同步方法以及Java提供的并发工具类。下面我们将深入探讨这些知识点。 1. **线程间的协作**: - `sleep()` 和 `wait()` 的区别:`...

    Java面试题线程部分.docx

    10. **线程调度算法**: - 分时调度:每个线程获得一定时间片,轮转执行。 - 抢占式调度:根据线程优先级决定执行顺序,优先级高的先执行。 11. **线程终止条件**: - 时间片用完。 - 高优先级线程出现。 - I/...

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

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

    线程调度的优先级

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

    Java编写线程动画

    - **线程调度**:操作系统负责决定何时切换线程执行,Java提供了Thread.yield()和Thread.sleep()方法影响线程调度。 6. **实战示例** - **创建动画线程**:定义一个循环更新动画状态的线程,如旋转图片、移动物体...

    Java多线程--等待所有子线程执行完的五种方法.docx

    尽管不推荐,但可以通过`Thread.sleep()`方法让主线程休眠一段时间来等待子线程。这种方法的问题在于,睡眠时间必须预估,且不准确,可能导致主线程提前唤醒或过度等待。 ### 方法二:`Thread.join()`方法 `Thread....

    java线程文档大全

    2. **线程创建**:Java提供两种方式创建线程,一是直接继承Thread类并重写run()方法,二是实现Runnable接口并定义run()方法,然后通过Thread类的构造函数将Runnable对象传递进去。 3. **线程交互**:线程之间的通信...

    java多线程.

    4. **线程调度**:操作系统负责线程调度,决定哪些线程可以获取CPU时间片并执行。 5. **线程同步与互斥**:当多个线程访问共享资源时,为了防止数据不一致,需要采用同步机制,例如使用`synchronized`关键字或者显式...

Global site tag (gtag.js) - Google Analytics