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次执行!

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

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

相关文章推荐

多线程学习(五)线程的调度-休眠&优先级

转自:http://lavasoft.blog.51cto.com/62575/221790 Java线程:线程的调度-休眠 Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系...

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

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

Java多线程基础--07之 线程休眠

0. 概要本章,会对Thread中sleep()方法进行介绍。涉及到的内容包括:概要 sleep介绍 sleep示例 sleep 与 wait的比较1. sleep()介绍sleep()定义在Thre...

java多线程--线程休眠

1. sleep()介绍 sleep() 定义在Thread.java中。 sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。sleep()会指定休眠时...

Java多线程系列--“基础篇”07之 线程休眠

1. sleep()介绍 sleep() 定义在Thread.java中。 sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。sleep()会指定休...

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

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

Java多线程-线程的调度(优先级)

与线程休眠类似,线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。 线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认...

java多线程基础(1)-由调度方式引入线程各种运行状态

线程的调度方式 所有java虚拟机都有一个线程调度器,用来确定哪个时刻运行哪个线程。   它主要包含2种调度器:抢占式(preemptive)和协作式(cooperative).           ...

Java多线程:线程的调度-优先级

和线程休眠类似,线程的优先级仍然无法保障线程的执行次序,只不过,

Java多线程-线程的调度(合并)

线程的合并的含义就是将几个并行线程的线程合并为一个单线程执行,应用场景是当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。 join为非静态方法,定义如下: void join()...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java多线程 线程的调度(休眠)
举报原因:
原因补充:

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