線程同步(重難點)

1.并發(fā)

  • 并發(fā):同一個對象被多個線程同時操作,當多個線程訪問同一個線程對象

2.線程同步

  • 處理多線程問題時,多個線程訪問同一個對象,并且有些縣城想要修改這個對象事,需要線程同步。
  • 線程同步是一種等待機制,多個需要同時訪問此對象的線程進入對象的線程池形成隊列,接著有序、依次執(zhí)行。
  • 線程同步安全形成條件:隊列+鎖
  • 由于同一進程的多個線程共享同一塊存儲空間,帶來方便的同時也會帶來訪問沖突問題,為了保證數(shù)據(jù)在方法中被訪問時的正確性,在訪問時加入鎖機制,synchronized,當對象獲得排它鎖時,獨占資源,其他線程必須等待,使用后釋放鎖即可。

3.排它鎖存在問題

  • 其他需要此鎖的線程被掛起
  • 多線程競爭下,加鎖,釋放鎖會導致比較多的上下文切換和調(diào)度延時,引起性能問題
  • 優(yōu)先級高的線程等待優(yōu)先級低的線程釋放鎖,會導致優(yōu)先級導致,引起性能問題。

3.并發(fā)問題代碼示例

買票

public class TestThread extends Thread{
   private int ticketnum = 10;
   boolean flag = true;
   @Override
   public void run() {
       while(flag) {
           try {
               buy();
           } catch (InterruptedException e) {
               e.printStackTrace();
           }
       }
   }
   private void buy() throws InterruptedException {
       if(ticketnum>0)
           System.out.println(Thread.currentThread().getName() + "買到了倒數(shù)第" + ticketnum-- + "張票");
       else
           flag = false;
       Thread.sleep(1000);
   }

   public static void main(String[] args) {
       TestThread testThread = new TestThread();
       new Thread(testThread,"個人").start();
       new Thread(testThread,"代理").start();
       new Thread(testThread,"其他").start();
   }
}
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 什么是多線程? ? 線程是指程序運行的流程,多線程則是指可以運行一個以上線程的程序,多線程使程序運行的效率變得更高...
    小任務大夢想閱讀 338評論 0 0
  • 多線程 什么是多線程? CPU在線程之間快速切換,制造了線程并行運行的假象,好似它們在一個比實際CPU慢一些的CP...
    9283856ddec1閱讀 667評論 0 0
  • 線程簡介 線程是程序中的執(zhí)行線程。Java 虛擬機允許應用程序并發(fā)地運行多個執(zhí)行線程。多線程即多任務,比如邊吃飯邊...
    suger飯團閱讀 326評論 0 1
  • 多線程 線程,進程,多線程 一、java線程 1. 線程狀態(tài) 2. 線程方法 方法說明setPriority(in...
    雞龍閱讀 1,527評論 0 1
  • 多線程 以道路為例子:原來是一條路,慢慢因為車多了,道路阻塞,效率極低為了提高使用的效率,能夠充分利用道路,于是加...
    關阿貍閱讀 260評論 0 0

友情鏈接更多精彩內(nèi)容