技术学习笔记
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode

1.2线程控制

停止线程

  • this.interrupted() 测试当前线程是否已经是中断状态,执行后把标志位设置为 false 。

  • this.isInterrupted() 测试线程 Thread 是否已经中断,但不清除标志位。

  • thread.interrupt(),run 方法中有sleep,使用try的 catch可以捕捉到 InterruptedException

  • 异常法停止一个线程,抛出 InterruptedException 。(推荐)

  • thread.stop() 暴力停止,不推荐。

  • 使用 return 停止线程。

暂停线程

  • suspend 与resume
  • 它们的缺陷:独占(不同步)。如果子线程中有调用 synchronized 方法,将导致同步锁可能未被释放,在主线程调用相同 synchronized 方法时无法获得锁,程序卡住。

yield 方法

交出控制权

thread.yield()

放弃当前 CPU 资源,让给其他任务去占用。(但放弃的时间不确定,可能很短)

牺牲自我,成就他人。

线程优先级

A 调用 B ,则默认的, B 的优先级与 A 一致。

  • 规则性,按优先级的高低来分配 CPU 资源,优先级 1-10 逐次增高。
  • 随机性,优先级高的不一定先执行完,优先级高只是保证会被尽量多地分配运行资源。
thread.setPriority(6);//设置优先级

守护线程

线程分为:用户线程、守护线程。

GC 即是守护线程的一种。

当前 JVM 实例中,最后一个 非守护线程(用户线程) 结束了,守护线程才结束。

thread.setDeamon(true);//将 thread 设定为守护线程。