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

原创 2013年12月02日 11:55:42

Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。

这里要明确的一点,不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制。

线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休眠一定时间后,线程会苏醒,进入准备状态等待执行。

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


测试代码如下:

package thread;

/**
 * 线程的调度-休眠
 * 
 * @author administrator
 * 
 */
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 {

		@Override
		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次执行!
线程2第2次执行!
线程1第2次执行!

多运行测试几遍会发现,每次的结果都一样。这就验证了上面说的只能 “最大限度的影响线程执行的次序,而不能做到精准控制”。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java多线程七:线程调度(休眠)sleep()

线程休眠线程休眠的目的是使线程让出CPU的使用权.当线程休眠时,会将CPU资源的使用交给其他线程,以便能够线程之间的轮换调用.当休眠一定时间后,线程就会苏醒,然后进入准备状态等待执行.sleep()函...
  • yin380697242
  • yin380697242
  • 2016年10月24日 20:48
  • 3042

Java多线程的调度策略

在Java多线程环境中,为保证所有线程的执行能按照一定的规则执行,JVM实现了一个线程调度器,它定义了线程调度的策略,对于CPU运算的分配都进行了规定,按照这些特定的机制为多个线程分配CPU的使用权。...
  • wangyangzhizhou
  • wangyangzhizhou
  • 2014年11月14日 20:22
  • 9059

CUDA 学习(八)、线程块调度

一、调度        如果我们有19个线程块和4个SM,将所有的线程都分配到一个SM上进行处理,显然不够合理。如果让前3个SM每个处理6个线程块,最后一个SM处理一个线程块,那么最后一个线程块就会...
  • tiemaxiaosu
  • tiemaxiaosu
  • 2016年10月25日 17:54
  • 821

Java线程(四):线程中断、线程让步、线程睡眠、线程合并

最近在Review线程专栏,修改了诸多之前描述不够严谨的地方,凡是带有Review标记的文章都是修改过了。本篇文章是插进来的,因为原来没有写,现在来看传统线程描述的不太完整,所以就补上了。理解了线程同...
  • ghsau
  • ghsau
  • 2013年12月26日 20:29
  • 33364

JAVA 多线程编程 --线程的调度策略

JAVA中一个线程有自己的优先级(priority) getPriority:返回当前线程的优先级 setPriority:设置当前线程的优先级   既然JAVA支持多线程,那么多个线程同时执...
  • sigangjun
  • sigangjun
  • 2015年08月19日 19:59
  • 483

JAVA多线程——线程的休眠和恢复

线程休眠的两种方式: 1. Thread.sleep() 与锁操作无关,如果该方法恰好在一个锁的保护范围之内,当前线程即使在执行sleep()的时候,仍然继续保持监视锁。  sleep方法实际上仅仅...
  • hqq2023623
  • hqq2023623
  • 2016年03月26日 22:29
  • 1256

java多线程: 线程的调度-休眠

java多线程调度是java多线程的核心,只有良好的调度
  • carl_jiang
  • carl_jiang
  • 2014年08月28日 11:07
  • 287

一个用于列举所有线程的JSP页面,便于调试

html> head> title>Threads in oschinatitle> style> body {font-size:8pt;} ol {lin...
  • laohanfei
  • laohanfei
  • 2017年03月24日 10:32
  • 158

一篇博文彻底了解线程的调度策略

线程的调度策略 在java的线程开发中,线程的调度策略是一个很重要的知识点,起承上启下的作用,所以我们下面去一起看看系统是怎么安排线程之间的运行规则的。 线程调度的目的 首先我们要知道,...
  • farley119
  • farley119
  • 2016年12月04日 22:19
  • 1472

多线程中是否必须使用sleep方法

近期在使用多线程开发时遇到一些有意思的东西—在线程run方法中是否需要当前线程睡眠一段时间。 要了解sleep方法,那么首先得了解到它的原理及其使用方法。 使用简介: 在这里以JAVA的API为...
  • qq_34401512
  • qq_34401512
  • 2017年09月01日 09:43
  • 1009
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java多线程 线程的调度(休眠)
举报原因:
原因补充:

(最多只允许输入30个字)