Thread的小基礎(二)

2021-06-09 02:39:18 字數 3380 閱讀 2056

執行緒同步

為什麼需要「執行緒同步」

執行緒間共享**和資料可以節省系統開銷,提高程式執行效率,

但同時也導致了資料的「訪問衝突」問題,

如何實現執行緒間的有機互動、並確保共享資源在某些關鍵時段只能被乙個執行緒訪問,即所謂的「執行緒同步」(synchronization)就變得至關重要。

synchronized關鍵字的使用方式有兩種:

用在物件前面限制一段**的執行(同步**塊)

public void push(char c)

}

用在方法宣告中,表示整個方法為同步方法

同步**塊可以使用任意物件作為鎖,同步方法使用的鎖只有乙個--this。static同步方法使用的鎖是該方法所屬類的物件。型別.class

同步好處:決了執行緒安全問題

同步弊端

降低了執行效率(判斷鎖是較為消耗資源的)

同步巢狀,容易出現死鎖

/*

同步的兩種表現形式:

1,同步**塊:需要乙個鎖。

2,同步函式:問:同步函式用的是哪個鎖呢?

需求:將售票程式通過同步函式的形式解決一下執行緒安全問題。

*/

class saleticket implements runnable

}

publicsynchronized void show()

catch(exceptione){}

system.out.println(thread.currentthread().getname()+".....sale......"+tick--);

}

}

}

class threaddemo6

}

下面執行緒同步的售票應用:

packagecn.csdn.hr.thread;

public

classsale }

classticketimplementsrunnable

/*if(s>0)catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+"....."+s--);

}*/}

public

synchronized

voidshow()catch(interruptedexception e)

system.out

.println(thread.currentthread().getname()+

"....."+s

--);

} }}

/***同步的兩種方法: *

* 1.

** synchronized (物件)

** 2.採用函式的方法:使用的鎖是 this

*    public synchronized void show()**

**單例模式:

*懶漢式:結合執行緒的應用

*同步物件

* class single

*    public static  single getinstance()

*       }

*       return s;

*      

*    }**

*同步函式

* class single

*    public static synchronized singlegetinstance()

*      

*    }

*餓漢式:

* class single

*    public static single getinstance()

* }*/

第二個事例:

packagecn.csdn.hr.thread;

classtickets

public

synchronized

voidaction(string name) }

classticketsthreadextendsthread

publicvoidrun()

}catch(exception e){} }

} public

classtestthread }

Thread學習基礎(一)

實現多執行緒的兩種方法 繼承thread,實現runnableclass thread1 extends thread class myrunnable implements runnable public class demo1 start thread.sleep int milisecond ...

python的thread和threading區別

python提供了多種模組用來支援多執行緒程式設計,thread 在python3中改名為 thread threading,和 queue模組。通過加入queue模組,使用者可以建立多個執行緒共享資料的佇列資料結構。thread和threading模組都可以用來建立和管理執行緒,而thread模組...

Java基礎 Thread之jion 詳解

在多執行緒的程式設計中,我們會遇到需要使用join 的情況,在我的理解裡就是在並行的狀態下進行序列執行。public final void join throws interruptedexception 等待該執行緒終止。該方法會丟擲中斷異常,實際上是應為join是利用wait 函式來構造的。即當...