1.线程状态转换
假设有线程t
①.情况1:NEW --> RUNNABLE
- 当调用t.start()方法时,由NEW --> RUNNABLE;
②.情况2:
RUNNABLE <--> WAITING
- 线程t执行synchronized(obj)获取了对象锁后:
- 调用obj.wait()方法时,线程t从RUNNABLE --> WAITING;
- 调用obj.notify(),obj.notifyAll()或者t.interrupt()时,如果竞争锁成功,线程t从WAITING --> RUNNABLE;如果竞争锁失败,线程t从WAITING --> BLOCKED;
③.情况3:
RUNNABLE <--> WAITING
- 当前线程(线程t之外的线程)中调用t.join()方法时,当前线程(线程t之外的线程)从RUNNABLE --> WAITING;(注意是当前线程(线程t之外的线程)在线程t对象的监视