高考前别人都在努力的复习,我在看教材。看着目录想着每一个对应的标题下,对应的考试大纲,再联系自己做过的该条目的考察套路。虽然最后成绩也一般,但是过得很轻松,性价比很高。看到这本书,代码多于枯燥的理论,所以拿过来,将以往不管是项目还是学习中遇到的问题回顾下,就当看教科书。
返回代码段正在被哪个线程执行。
isAlive()
判断当前线程的状态。
sleep()
线程沉睡一段时间。
getId()
得到线程的Id。
yield()
让出CPU执行权,重新分配时间片。放弃的时间不确定,有可能刚刚放弃,马上又获取CPU时间片。
isInterrupted()
判断测试线程是否已经停止,不清除状态标记。
interrupted()
测试当前线程是否已经是中断状态,之后后具有将该状态标志置清除为false的功能。
public static void main(String[] args) {
Thread.currentThread().interrupt();
System.out.println("是否停止1? ="+Thread.interrupted());
System.out.println("是否停止2? ="+Thread.interrupted());
System.out.println("end!");
}
Output
是否停止1? =true
是否停止2? =false
end!
interrupted + break退出线程
public class MyThread5 extends Thread {
@Override
public void run(){
super.run();
for(int i = 0;i < 500000; i++){
if(this.interrupted()){
System.out.println("已经是停止状态了!我要退出了!");
break;
}
System.out.println("i=" + (i + 1));
}
}
}
弊端:如果循环外面还有要执行的语句,此方法会失效。
可以停止线程,不推荐。
推荐停止线程的方法,此种方法停止线程上层可以捕获到异常,使得线程停止的事件可以传播。
stop会停止线程,但是这是一个废弃的方法。会抛出ThreadDeath异常。
弊端:会产生不可预料的结果,比如锁的释放不当,导致数据不统一问题。
suspend与resume方法,一个是暂停线程,一个是恢复执行线程。
问题1:造成独占现象,使得其他线程无法访问公共同步对象。
问题2:造成数据不同步。
线程的优先级有助于“线程规划器”确定在下一次选择哪一个线程来优先执行。
线程优先级具有继承特性:A启动B线程,则A与B的优先级是相同的。
setDaemon()方法可以设置是否为守护线程。当进程中不存在非守护线程时,守护线程也就自动销毁了(典型的守护线程:垃圾回收线程)。