1.2线程控制
-
this.interrupted() 测试当前线程是否已经是中断状态,执行后把标志位设置为 false 。
-
this.isInterrupted() 测试线程 Thread 是否已经中断,但不清除标志位。
-
thread.interrupt(),run 方法中有sleep,使用try的 catch可以捕捉到 InterruptedException。
-
异常法停止一个线程,抛出 InterruptedException 。(推荐)
-
thread.stop() 暴力停止,不推荐。
-
使用 return 停止线程。
- suspend 与resume
- 它们的缺陷:独占(不同步)。如果子线程中有调用 synchronized 方法,将导致同步锁可能未被释放,在主线程调用相同 synchronized 方法时无法获得锁,程序卡住。
交出控制权
thread.yield()
放弃当前 CPU 资源,让给其他任务去占用。(但放弃的时间不确定,可能很短)
牺牲自我,成就他人。
A 调用 B ,则默认的, B 的优先级与 A 一致。
- 规则性,按优先级的高低来分配 CPU 资源,优先级 1-10 逐次增高。
- 随机性,优先级高的不一定先执行完,优先级高只是保证会被尽量多地分配运行资源。
thread.setPriority(6);//设置优先级
线程分为:用户线程、守护线程。
GC 即是守护线程的一种。
当前 JVM 实例中,最后一个 非守护线程(用户线程) 结束了,守护线程才结束。
thread.setDeamon(true);//将 thread 设定为守护线程。