Java多线程编程核心技术(二)

时间:2019-03-19
本文章向大家介绍Java多线程编程核心技术(二),主要包括Java多线程编程核心技术(二)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

先sleep在interrupt()停止,和,先interrupt()停止再sleep。
如果在sleep状态下停止某一线程,会进入catch语句,并且清除停止状态值,使之变成false。
使用stop暴力停止线程。
调用stop()方法时会抛出java.lang.ThreadDeate异常,此异常不需要显示的去捕捉。
方法stop()已经作废,因为如果强制停止线程有可能使一些清理性的工作得不到完成。
另外一个情况就是对锁定的对象进行了解锁,导致数据得不到同步的处理,出现数据不一致的情况。
使用return停止线程,将方法interrupt与return结合能够停止线程。
暂停线程:suspend,resume方法。
suspend,resume方法的缺点——独占,不同步。
在使用suspend,resume方法时,如果使用不当,极易造成公共的同步对象的独占,使得其他线程无法访问到公共同步对象。
yield方法:放弃当前的CPU资源,将它让给其他的任务去占用CPU执行时间,但是放弃的时间不确定,有可能刚刚放弃,
马上又获得CPU时间片。
线程的优先级:
设置线程 的优先级:setPriority()方法。
优先级较高的线程会获得更多的CPU资源,也就是CPU优先执行优先级较高的线程对象中的任务。
设置线程的优先级有助于帮“线程规划器”确定在下一次选中哪一个线程来优先执行。
线程的优先级分为1-10等级,如果小于1或大于10,JDK会抛出异常throw new IllegalArgumentException().
线程优先级的继承特性:
比如A启动B线程,则B线程的优先级和A线程是一样的。
优先级具有规则性:高优先级的线程总是先大部分执行完,当不代表高优先级的线程全部先执行完。
当线程的优先级的等级差距很大时,谁先执行完和代码的调用顺序无关。
优先级具有随机性:优先级较高的线程不一定每一次都先执行完。
守护线程:
在Java线程中有两块线程,一种是用户线程,另一种是守护线程。
守护线程有陪伴,守护的含义,当线程中不存在非守护线程了,则守护线程自动销毁。典型的守护线程就是垃圾回收线程,
当进程中没有非线程了,则垃圾回收线程也就没有存在的意义了,自动销毁。
任何一个守护线程都是整个JVM中所有非守护线程的保姆,只要当前JVM实例中存在任何一个非守护线程没有结束,守护线程就在工作,
只有当最后一个非守护线程结束时,守护线程菜随着JVM一同结束工作。
通过Thread.setDaemon(true)设置为守护线程。如果不设置次属性,默认为用户线程。