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

2014-11-24 07:32:06 · 作者: · 浏览: 1
ring[] args) { // 创建共享对象 Service service = new Service(); // 创建线程 SleepThread t1 = new SleepThread("t1", service); SleepThread t2 = new SleepThread("t2", service); // 启动线程 t1.start(); t2.start(); } } class SleepThread extends Thread { private Service service; public SleepThread(String name, Service service) { super(name); this.service = service; } public void run() { service.calc(); } } class Service { public synchronized void calc() { System.out.println(Thread.currentThread().getName() + "准备计算"); System.out.println(Thread.currentThread().getName() + "感觉累了,开始睡觉"); try { Thread.sleep(10000);// 睡10秒 } catch (InterruptedException e) { return; } System.out.println(Thread.currentThread().getName() + "睡醒了,开始计算"); System.out.println(Thread.currentThread().getName() + "计算完成"); } } 输出结果:
t1准备计算
t1感觉累了,开始睡觉
t1睡醒了,开始计算
t1计算完成
t2准备计算
t2感觉累了,开始睡觉
t2睡醒了,开始计算
t2计算完成

线程合并


线程合并涉及到三个方法,如下:
void join()
等待该线程终止。
void join(long millis)
等待该线程终止的时间最长为 millis 毫秒。
void join(long millis, int nanos)
等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。
线程合并是优先执行调用该方法的线程,再执行当前线程,来看一个小例子:
public class JoinTest {
	public static void main(String[] args) throws InterruptedException {
		JoinThread t1 = new JoinThread("t1");
		JoinThread t2 = new JoinThread("t2");
		t1.start();
		t2.start();
		t1.join();
		t2.join();
		System.out.println("主线程开始执行!");
	}
}
class JoinThread extends Thread {
	public JoinThread(String name) {
		super(name);
	}
	public void run() {
		for(int i = 1; i <= 10; i++)
			System.out.println(getName() + getId() + "执行了" + i + "次");
	}
}
t1和t2都执行完才继续主线程的执行,所谓合并,就是等待其它线程执行完,再执行当前线程,执行起来的效果就好像把其它线程合并到当前线程执行一样。

线程优先级


线程最低优先级为1,最高优先级为10,看起来就有10个级别,但这10个级别能不能和CPU对应上,还未可知,Thread类中提供了优先级的三个常量,如下:
java.lang.Thread
public static final int MAX_PRIORITY 10
public static final int MIN_PRIORITY 1
public static final int NORM_PRIORITY 5
我们创建线程对象后,如果不显示的设置优先级的话,默认为5。优先级可以看成一种特权,优先级高的,获取CPU调度的机会就大,优先级低的,获取CPU调度的机会就小,这个和我们现实生活很一样啊,优胜劣汰。线程优先级的示例就不写了,比较简单。

wait()和sleep()区别


区别太大了,但是在Java线程面试题中是很常见的问题,相信你 阅读过本专栏后,能够轻松的解答,这里不再赘述。 本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17560467,转载请注明。