平時寫Java程序或者Java web 程序的時候,不多用到多線程,可是多線程卻很是很是的重要,而我卻沒有機會,沒有情景,也不到碰見什麼業務邏輯去使用多線程,所以對多線程的理解一直停留在:java
一、如何實現多線程?web
二、調用star(),run()方法的區別?多線程
三、怎麼線程同步?ide
四、線程和進程區別?測試
等等基礎的問題。this
今天忽然發現一個小細節,就是在線程通訊的時候,使用 wait(),notify(),notifyAll()方法的時候,必須放在同步進程塊中,若是不放入就會產生異常:java.lang.IllegalMonitorStateException線程
這是我第一次發現這個神奇的東西,曾經歷來沒有發現,或許是我沒怎麼用過吧。code
測試代碼1:進程
public class MyThread implements Runnable{ @Override public void run(){ try { this.wait(); System.out.println("11"); } catch (InterruptedException e) { e.printStackTrace(); } } }
測試代碼2:同步
public class MyThread2 implements Runnable{ @Override public void run(){ this.notifyAll(); } }
main方法:
public class Mytest extends Thread{ public static void main(String[] args) { Runnable run1=new MyThread(); Runnable run2=new MyThread2(); Thread t1=new Thread(run1); Thread t2=new Thread(run2); t1.start(); try { Thread.currentThread().sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } t2.start(); } }
-------------------控制檯輸出:--------------