執行緒的同步與死鎖

2021-09-25 06:37:16 字數 1815 閱讀 8211

1、執行緒同步:當有乙個執行緒在對記憶體進行操作時,其他執行緒都不可以對這個記憶體位址進行操作,直到該執行緒完成操作, 其他執行緒才能對該記憶體位址進行操作,而其他執行緒又處於等待狀態。如果執行緒不同步,即在不同執行緒同時訪問同一資源的過程中就會出現問題。

2、執行緒同步處理——關鍵是「鎖」

使用synchronized關鍵字實現執行緒同步。在同步**塊中的**每次僅允許乙個執行緒執行。

利用同步**塊解決:

class mythread implements runnable catch(interruptedexception e)

system.out.println(thread.currentthread().getname() +"," + this.ticket --);

}else

}}}}

public class demo

}加入同步處理之後,程式的整體效能有所下降。

利用同步方法解決:

class mythread implements runnable catch(interruptedexception e)

system.out.println(thread.currentthread().getname() +"," + this.ticket --);

return true;

}else

}@override

public void run() }}

3、執行緒死鎖

造成死鎖的主要原因在於執行緒之間在互相等待,等待對方讓出資源。若干個執行緒訪問同一資源時一定要進行同步處理,而過多的同步會造成死鎖。

5、利用object類解決重複操作

死等:public final void wait​() throws interruptedexception

喚醒第乙個等待執行緒:public final void notify();

喚醒全部等待執行緒:public final void notifyall();

4、【生產者與消費者模型】

// 生產者與消費者模型

//生產者

class producer implements runnable

@override

public void run() else

}}    

}// 消費者

class consumer implements runnable

@override

public void run() }}

//將同步處理交由message完成(生產和消費的物件)

class message1 catch (interruptedexception e)

}this.title = title ;

//允許有休眠

try catch(interruptedexception e)

this.content = content ;

this.flag = false ; //已經生產過了

super.notify(); //喚醒一下等待的程序

}public synchronized string get() catch (interruptedexception e)

}try catch(interruptedexception e)

try finally }}

public class pool

}通過同步處理與解決重複操作,此時剛好是:生產乙個完整產品消費乙個完整產品

執行緒同步與死鎖

執行緒同步與死鎖 課程大綱 一 多執行緒共享資料 1 在多執行緒的操作中,多個執行緒有可能同時處理同乙個資源,這就是多執行緒中的共享資料。二 執行緒同步 1 解決資料共享問題,必須使用同步,所謂同步就是指多個執行緒在同乙個時刻只能有乙個執行緒執行指定 其他執行緒要等到該執行緒執行結束之後才能繼續執行...

執行緒 同步與死鎖

一,本章目標 了解執行緒同步的作用 了解同步 塊及同步方法的作用 了解死鎖的產生 二,具體內容 說明 在多執行緒的開發中,同步與死鎖的概念是非常重要的,一定要掌握以下幾點 那裡需要絨布 如何實現同步,了解即可 實現同步之後有什麼 問題引出 以賣火車票為例,如果想買火車票,可以去火車站購買或者去各個售...

執行緒死鎖與同步

同步死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。當系統中供多個程序共享的資源如印表機,其數目不足以滿足各個程序的需要時,會引起各個程序對...