執行緒同步
為什麼需要「執行緒同步」
執行緒間共享**和資料可以節省系統開銷,提高程式執行效率,
但同時也導致了資料的「訪問衝突」問題,
如何實現執行緒間的有機互動、並確保共享資源在某些關鍵時段只能被乙個執行緒訪問,即所謂的「執行緒同步」(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 函式來構造的。即當...