Thread和Runable的區別、Synchronized鎖關鍵字

 

 

1、Thread和Runable的區別java

  1. Thread是基類,子類必繼承他實現其run方法。其也是實現了Runable接口。Thread是普通的類,並不是抽象類或者密封類等。
  2. Runnable是接口,子類必須實現run方法,該接口就只有惟一的抽象方法run。
  3. 因爲Java單繼承,因此Thead經過類繼承方式實現接口,存在擴展性問題。
  4. 他們都是經過start方法來啓動,能夠達到異步操做,若是用run方法啓動其將是同步方法,失去多線程的意義。
  5. Runnable,的實現類能夠實現資源共享,多個調用只須要實例化Runnable的一個實例,而後將其放到 new Thread(new Runnable實現類).start方法(能夠new多個同樣的即表示多個線程),啓動。
  6. 實驗發如今實現Runnable的多線程中,若是同時啓動的實例過多會在第一次執行的時候出現多線程併發,主要出如今開始,有肯能是程序啓動加載資源致使,大多度數時候仍是穩定的。好比實現的run方法控制了10個實際new 的個數太多久會出現,可是頻率不高。
  7. 能夠在Thread中實現匿名方法也能夠實現多線程異步華。
  8. 主線程結束,子線程能夠繼續執行。
  9. 在java中,每次程序運行至少啓動2個線程。一個是main線程,一個是垃圾收集線程。

 

2、Synchronized多線程

  1. Java語言的關鍵字,當它用來修飾一個方法或者一個代碼塊的時候,可以保證在同一時刻最多隻有一個線程執行該段代碼。
  2. 當兩個併發線程訪問同一個對象object中的這個synchronized(this)同步代碼塊時,一個時間內只能有一個線程獲得執行。另外一個線程必須等待當前線程執行完這個代碼塊之後才能執行該代碼塊。
  3. 然而,當一個線程訪問object的一個synchronized(this)同步代碼塊時,另外一個線程仍然能夠訪問該object中的非synchronized(this)同步代碼塊。
  4. 尤爲關鍵的是,當一個線程訪問object的一個synchronized(this)同步代碼塊時,其餘線程對object中全部其它synchronized(this)同步代碼塊的訪問將被阻塞。
  5. 第三個例子一樣適用其它同步代碼塊。也就是說,當一個線程訪問object的一個synchronized(this)同步代碼塊時,它就得到了這個object的對象鎖。結果,其它線程對該object對象全部同步代碼部分的訪問都被暫時阻塞。
  6. 以上規則對其它對象鎖一樣適用。
相關文章
相關標籤/搜索