多线程编程学习笔记之一——基础知识

时间:2022-11-11 17:31:45
线程可以交由另一个线程去运行run方法,此时该线程调用isAlive()时,返回false
判断线程是否停止使用   this.interrupted()   this.isInterrupted() this.interrupted()          静态方法    判断停止的是运行该语句的线程 该方法能够清除状态,即两次调用第二次将返回false(中断状态被清除)this.isInterrupted()        非静态方法  判断停止的是this线程   不清楚中断标志 线程停止使用 interrupt()函数 但不会真正的中止线程  而是给线程做个中止标记,若想让线程真正停止(也可以使用return语句),则在判断其被标记停止后,要主动抛出InterruptedException异常(throw);如果线程在睡眠状态被标记中止,则直接jvm直接抛出InterruptedException,不需要程序主动抛出
stop()方法停止线程是采用暴力停止的方式,直接中断线程,并抛出ThreadDeath异常(无需显示捕获) 该方法已被废弃,原因是强制性中止线程将会导致一些请理性的工作无法完成,而且对锁定的对象进行了解锁,导致数据得不到同步处理,出现数据不一致的问题 sleep和wait的区别sleep  释放cpu资源一段时间,不释放已获取的锁wait   释放CPU资源一段时间,释放已获取的锁
线程停止和挂起 suspend()挂起      resume()停止这两个方法已被废弃,原因在于 两个方法在运行时时独占式的,使用不当很容易造成公共的同步对象的对战,使得其他线程无法访问公共同步对象 yield方法 放弃当前cpu资源,将它让给其他的任务去占用CPU执行时间。 注:放弃时间不确定。 线程优先级 1~10   优先级逐次升高;优先级有继承性,若A线程启动了B线程那么  B具有和A线程同样的优先级  默认优先级都为5多线程编程学习笔记之一——基础知识
图1-53是main函数中注释掉设置优先级的结果   图1-54是取消注释的结果可以看到 在更改了线程的优先级后,被main启动的线程就改变了优先级。  (图片来自于《Java多线程编程核心技术》)
守护线程 当进程中不存在非守护线程了,则守护线程自动销毁。e.g.  垃圾回收线程将一个线程设置为守护线程只需要调用setDaemon(true)即可