线程控制

1、join线程

当在某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join方法加入的join线程完成为止。

2、后台进程

任务是为其他的线程服务,如JVM的垃圾回收线程。如果所有的前台线程都死亡,后台线程会自动死亡

调用Thread对象setDaemon(true)可将指定线程设置成后台线程,但其必须在start()方法之前调用

3、线程睡眠:sleep

当前线程调用sleep方法后进入阻塞状态,在其sleep时间段内,该线程不会获得执行的机会,即使没有其他可运行的线程,处于sleep中的线程也不会运行,因此sleep方法常用来暂停程序的执行

4、线程让步:yield

让当前正在执行的线程暂停,但不会阻塞线程,而是将其转入就绪状态。yield只是让当前线程暂停一下,让系统的线程调度器重新调度一次,有可能暂停后有重新执行

当某个线程调用yield方法暂停后,只有优先级与当前线程相同,或者比当前线程优先级更高的就绪状态线程才获得执行机会

 

sleep与yield区别:

1)sleep暂停后会给其他线程执行机会,不理会其他线程优先级,但yield只会给优先级相同或更高的线程执行机会

2)sleep将线程转入阻塞状态,直到阻塞时间到了才会转入就绪状态,而yield不会转入阻塞状态,只强制当前线程进入就绪状态。

3)sleep方法声明抛出异常,调用时要么捕获异常要么显示抛出异常,yield没有声明任何抛出异常

4)sleep比yield有更好的可移植性,通常不依靠yield控制并发线程的执行

 

5、改变线程优先级

Thread提供了setPriority(int priority)和getPriority()来设置和返回线程优先级

MAX_PRIORITY:10

MIN_PRIORITY:1

NORM_PRIORITY:5

 

posted @ 2013-09-18 15:20  liutoutou  阅读(221)  评论(0编辑  收藏  举报