线程状态、同步
关于线程5种状态,创建、就绪、运行、阻塞、死亡;学习时候主要理解逻辑结构,这样5种状态就能够很容易的掌握理解,上面结构希望对你们理解有所帮助。
其次最难掌握的就是线程同步时的状态 ,当某个线程thread1获得synchronized同步锁,其他线程进入阻塞状态,直到thread1线程释放同步锁时候,其他线程通过notify()唤醒线程重新获得同步锁,等待cpu调度,就绪状态,获得CPU后在进入运行状态。
对于线程同步:存在共享同一数据源的时候,存在线程安全。
主要通过二种:同步方法和同步代码块
public synchronized void run(){
sale();//多线程时,同步方法运行时候有可能需要等待长时间,效率低
}
public void run(){
while(true){
synchronized(this){//同步代码块,效率相比较高
sale();
}
}
}
关于初学者,能够知道理解这些知识我感觉已经够了。如有不足,希望多多指正,谢谢
六种说法:
public class TheatDemo { public static void main(String[] args) throws InterruptedException { // 线程状态 NEW Thread t1 = new Thread(() -> { try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } }, "线程1:"); System.out.println(t1.getName() + t1.getState()); // 线程状态 RUNNABLE Thread t2 = new Thread(() -> { while (true) { } }, "线程2:"); t2.start(); Thread.sleep(1000); System.out.println(t2.getName() + t2.getState()); // 线程状态 BLOCKED Object obj = new Object(); Thread t3 = new Thread(() -> { synchronized (obj) { } }, "线程3:"); synchronized (obj) { t3.start(); Thread.sleep(500); System.out.println(t3.getName() + t3.getState()); } // 线程状态 WAITING Thread t4 = new Thread(() -> { synchronized (obj) { try { obj.wait(); } catch (InterruptedException e) { throw new RuntimeException(e); } } }, "线程4:"); t4.start(); Thread.sleep(500); System.out.println(t4.getName() + t4.getState()); // 线程状态 WAITING Thread t5 = new Thread(() -> { synchronized (obj) { try { obj.wait(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } } }, "线程5:"); t5.start(); Thread.sleep(500); System.out.println(t5.getName() + t5.getState()); // 线程状态 TERMINATED Thread t6 = new Thread(() -> { }, "线程6:"); t6.start(); Thread.sleep(500); System.out.println(t6.getName() + t6.getState()); } }
本文来自博客园,作者:chch213,转载请注明原文链接:https://www.cnblogs.com/chch213/p/8376901.html