Java多线程-线程的调度(休眠)

摘要:
Java线程调度是Java多线程的核心。只有良好的调度才能充分发挥系统性能,提高程序执行效率。线程休眠的目的是使线程放弃CPU,这是最简单的方法之一。当线程休眠时,它会将CPU资源移交给其他线程,以便它们可以依次执行。经过一定时间的休眠后,线程将唤醒并进入就绪状态,等待执行。简单地说,在调用sleep的线程上睡觉。包装cn。螺纹;/***线程调度-休眠**@author Lin Jiqin**@version1.02013-7-24 AM 09:12:14*/publicclassThreadSleep{publicstaticvoidmain{线程睡眠=新线程睡眠();线程t1=睡眠.newMyThread1();Threadt2=新线程;t1.start();t2.start());}ClassMyThread1extendsThread{publicvoidrun run(){用于{System.out.println(“线程1的第一次”+i+“执行!”);尝试{Thread.sleep;}捕获{e.printStackTrace();}}}线程1第0次执行!线程2第二次执行!

Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。
这里要明确的一点,不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制。
线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休眠一定时间后,线程会苏醒,进入准备状态等待执行。

线程休眠的方法是Thread.sleep(long millis)和Thread.sleep(long millis, int nanos),均为静态方法,那调用sleep休眠的哪个线程呢?简单说,哪个线程调用sleep,就休眠哪个线程。

复制代码
package cn.thread;
/**
 * 线程的调度-休眠
 * 
 * @author 林计钦
 * @version 1.0 2013-7-24 上午09:12:14
 */
public class ThreadSleep {
    public static void main(String[] args) {
        ThreadSleep sleep = new ThreadSleep();
        Thread t1 = sleep.new MyThread1();
        Thread t2 = new Thread(sleep.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();
                }
            }
        }
    }
}
复制代码
线程1第0次执行!
线程2第0次执行!
线程1第1次执行!
线程2第1次执行!
线程1第2次执行!
线程2第2次执行!

从上面的结果输出可以看出,无法精准保证线程执行次序。

本文转自http://www.cnblogs.com/linjiqin/p/3209885.html 感谢作者

免责声明:文章转载自《Java多线程-线程的调度(休眠)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇svn清理失败且乱码 问题解决k8s集群安装(单节点)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

二、Apache MPM三种工作模式

一、Apache即现阶段比较流行的Web服务,是一个多模块化的Web服务,使用简单,速度快,稳定性好,可以做负载均衡及代理服务器来使用。 二、Apache有三种工作模式分别是 prefork、work、even Apache prefork模型 1、prefork介绍 prefork模型,有一个主控制进程,然后生成多个子进程,使用select模型,最...

进程之间的通信

进程/线程同步的方式和机制,进程间通信 一、进程/线程间同步机制。 临界区、互斥区、事件、信号量四种方式临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果...

Ogre2.0 全新功能打造新3D引擎

不知当初是在那看到,说是Ogre2.0浪费了一个版本号,当时也没多想,以为没多大更新,一直到现在想做一个编辑器时,忽然想到要看下最新版本的更新,不看不知道,一看吓一跳,所以说,网络上的话少信,你不认识别人,别人张嘴就来,对别人也没损失,还可以装B下,靠. 从现在Ogre2.1的代码来看,大约总结下,更新包含去掉过多的设计模式,SoA的数据结构(用于SIMD...

Qt --- 信号槽:第五个参数

connect第五个参数说明: 1、Qt::AutoConnection: 默认值,使用这个值则连接类型会在信号发送时决定。如果接收者和发送者在同一个线程,则自动使用Qt::DirectConnection类型。如果接收者和发送者不在一个线程,则自动使用Qt::QueuedConnection类型。 2、Qt::DirectConnection:槽函数会在...

java进程占用CPU高的问题

一. 上节回顾怎么查看CPU使用率? top:显示了系统总体的CPU和内存使用情况,以及各个进程的资源使用情况。默认每隔3s刷新一次 ps:只显示每个进程的资源使用情况 top并没有细分进程的用户态CPU和内核态CPU pidstat:可以分析每个进程的CPU使用情况 通过top,ps,pidstat这些工具,能够很快找到CPU使用率较高的进程。要知道CP...

libevent 和 libev 提高网络应用性能

构建现代的服务器应用程序需要以某种方法同时接收数百、数千甚至数万个事件,无论它们是内部请求还是网络连接,都要有效地处理它们的操作。有许多解决方 案,但是 libevent 库和 libev 库能够大大提高性能和事件处理能力。在本文中,我们要讨论在 UNIX® 应用程序中使用和部署这些解决方案所用的基本结构和方法。libev 和 libevent 都可以在高...