關於多線程的一些新發現

平時寫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();
	}
}

-------------------控制檯輸出:--------------

相關文章
相關標籤/搜索