立即学习:https://edu.csdn.net/course/play/26270/326860?utm_source=blogtoedu
同步调用和阻塞区别:
同步调用时线程不一定是挂起状态。
线程状态:
NEW:被创建还没执行;
RUNNABLE(RUNNING,READY):线程已被放入Java虚拟机但有可能是在等待操作系统的资源(还没被操作系统处理器执行);
BLOCK:阻塞,正在等待监视器锁,来进入或重入synchronized;
WATING:等待,需其他线程中断或通知来唤醒;
TIMED_WATING:加了时长限制的等待,到时长后返回,或提前被中断或唤醒;
TERMINATED:已执行完毕。
线程调用的几种方法:
1.Thread.yield():线程让步,调用此方法,当前线程让出CPU资源,和其他线程重新一起再竞争资源来执行;
2.Thread.join():某一线程在调用该方法后,主线程或其他线程会等待此线程死亡或执行完毕后再执行;
3.Thread.sleep():线程休眠,调用方法后主动让出CPU一段时间,指定时间过后CPU会返回继续执行该线程,并且该线程不会释放持有的锁;
4.Object.wait():调用该方法前线程必须持有对象锁,调用此方法后,线程释放对象锁,进入WAITING状态,等其他线程调用notifyAll()等唤醒方法将自己唤醒,在拿到对象锁后继续之前的代码执行。