1.进程是操作系统进行资源分配的基本单位,而线程是操作系统进行调度的基本单位,即CPU分配时间的单位。
2.Java中的优先级来说不是特别的可靠,Java程序中对线程所设置的优先级只是给操作系统一个建议,操作系统不一定会采纳。而真正的调用顺序,是由操作系统的线程调度算法决定的。
3.反复调用同一个线程的start()方法是否可行?假如一个线程执行完毕(此时处于TERMINATED状态),再次调用这个线程的start()方法是否可行?
答:不可行。重复调用start()方法会抛出IllegalThreadStateException异常。这部分内容可参考代码
// 省略相关package和import信息
public class ThreadStateDemo { public static void main(String[] args) { startTwice(); } /** * 调用start方法两次 * * 查看java.lang.Thread#start()源码可以发现,其内部有一个变量threadStatus * 若该值不为0,会直接抛出java.lang.IllegalThreadStateException异常 * 下方demo,第一次调用start()方法,变量threadStatus值为0 * 第二次调用start()方法,变量threadStatus的值不为0,直接抛异常 */ private static void startTwice() { Thread thread = new Thread(() -> {}); thread.start(); // 第二次调用时,会抛出java.lang.IllegalThreadStateException异常 thread.start(); } }
4.Java线程的6个状态
// Thread.State 源码 public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; }
线程状态转换见下图:
5.关于Object.wait()和Thread.sleep(long):前者会释放锁,后者不释放锁。
http://concurrent.redspider.group/RedSpider.html
原文:https://www.cnblogs.com/xm66/p/15229467.html