多線程對同一個對象操做

多線程實現的兩種方式:安全

  繼承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();
View Code

兩個線程傳同一個對象,至關於這兩個線程對同一個對象進行操做。spa

注意:多線程對同一個對象操做的時候必定要加鎖synchronized,同時傳一個鎖旗標。線程

   加鎖時,原則上要雙重檢查。code

   鎖旗標對同一個對象有用,若是是兩個對象,則這兩個對象分別有本身的鎖旗標,此時鎖旗標就會失效。對象

   synchronized不只能夠加在代碼塊上,還能夠加在方法上。當加在方法上時,鎖旗標是this,誰調用這個方法,this就是誰,只要是同一個對象就行。blog

   synchronized提升了安全性,下降了性能。

 

如有錯誤之處,歡迎指正。謝謝!

相關文章
相關標籤/搜索