多線程實現的兩種方式:安全
繼承Thread類多線程
實現Runnable接口ide
這兩種方式都必須重寫run()方法。性能
當多線程對同一個對象操做時,必須實現Runnable接口,而不能繼承Thread類。由於繼承Thread類實現多線程時,操做的是不一樣的對象。this
1 Runnable r=new RunnableImpl(); 2 Thread t1=new Thread(r); 3 Thread t2=new Thread(r); 4 t1.start(); 5 t2.start();
兩個線程傳同一個對象,至關於這兩個線程對同一個對象進行操做。spa
注意:多線程對同一個對象操做的時候必定要加鎖synchronized,同時傳一個鎖旗標。線程
加鎖時,原則上要雙重檢查。code
鎖旗標對同一個對象有用,若是是兩個對象,則這兩個對象分別有本身的鎖旗標,此時鎖旗標就會失效。對象
synchronized不只能夠加在代碼塊上,還能夠加在方法上。當加在方法上時,鎖旗標是this,誰調用這個方法,this就是誰,只要是同一個對象就行。blog
synchronized提升了安全性,下降了性能。
如有錯誤之處,歡迎指正。謝謝!