java线程控制的基本方法(一)以及interrupt、inte
2017-04-25 本文已影响0人
exmexm
线程状态转换
//判断线程是否还活着,即线程是否还未终止
isAlive()
//获得线程的优先级数值
getPriority()
//设置线程的优先级数值
setPriority()
//指定当前线程睡眠指定的毫秒数
Thread.sleep()
//调用某线程的该方法,将当前线程与该线程“合并”,即等该线程结束,再恢复当前线程的运行。
join()
//让出CPU,当前线程进入就绪队列,等待调度。
yield()
//当前线程进入对象的wait pool
wait()
//唤醒对象的wait pool中的一个/所有等待等待线程
notify() / notifyAll()
参考:http://www.w2bc.com/Article/62802
区分好interrupt、interrupted、isInterrupted:
interrpupted()方法是Thread类的静态方法;第一次使用该方法如果已经中断,第二次使用该方法则会取消中断。
interrupt()是对象实例方法
在使用了interrupt()后,线程会将中断标志设置为true。如果线程处于waiting或timed_waiting状态,则会产生一个InterruptedException。
isInterrupted()是对象实例方法
在使用isInterrupted()后,如果中断标志为true则返回true。
代码
import java.util.*;
public class TestInterrupt2 {
public static void main(String[] args) {
Thread3 t = new Thread3();
t.start();
try {
/*main方法被睡眠了10000毫秒,与此同时t线程继续运行
*正常的结果是t每隔1s输出当前的日期
*主方法睡眠10000ms后,继续运行,interrupt打断t线程。*/
Thread.sleep(10000);
} catch(InterruptedException e) {
}
t.interrupt();
}
}
class Thread3 extends Thread {
public void run() {
while (true) {
System.out.println(" ======" + new Date() + "========");
try {
sleep(1000);
} catch (InterruptedException e) {
return;
}
}
}
}