java語言高階特性(一)多執行緒建立 互動

2021-08-08 12:36:02 字數 1896 閱讀 3602

第一種是繼承thread類,重寫該類的run()方法。

第二種 方式實現runnable介面,並重寫該介面的run()方法。

jdk1.5以前需要考慮 執行緒的建立 結束和 結果的獲取 等諸多細節不僅如此,使用newthread( )方式定義執行緒,在時間和 空間效率方面都存在不足。

excuteservices excutor=excutors.newcachethreadpool();

system.out

.print("all task submitted")

for(int i=0

;i<5;i++)

excutor.shutdown

; excutor.awaittermination(1,timeutil.days);

system.out

.print("all task completed")

如果我們將上述**中的newcachedthreadpool()改為newfixedthreadpool(2),括號中的字2, 表示建立了兩個執行緒,下面 的**不變, 則相等於 把 5 個任兩個執行緒來完成。這就意味著,每乙個執行緒完成 一次任務後, 並不會就此消逝, 而是繼續完成剩下的任務, 直到所有任務完成。

可見程池確實簡化了執行緒的管理, 提公升了執行緒的執行效能.

semaphore和countdownlatch強化了對多執行緒併發控制能力,簡化了控制線程間協調合作的方法。

訊號量 (semaphore), 有時被稱為訊號燈,它負責協調各個執行緒, 以保證 它們能夠正確、 合理的使用公共資源。 訊號量可 以控制某個資源可被 同時訪 問 的個數, 拿到訊號量 的執行緒可 以進人**,否則就等待,通過acquare()和 release ()獲取和釋放訪問許可。

閉鎖(countdownlatch)是乙個併發構造,它允許乙個或多個執行緒等待一系列制定操作的完成。閉鎖(countdownlatch)以乙個給定的計數初始化,每呼叫一次countdown(),這一數量就減一,然後通過呼叫await()方法,將阻塞執行緒,使其等待直到計數達到零。

為了解決多執行緒訪問共享資料時造成的資料訪問衝突問題,提供了具有多個具有執行緒安全性的類。

在閉鎖中,物件latch沒有使用synchronized關鍵字鎖定,但執行緒訪問不會衝突。除了countdownlatch以外,阻塞佇列(blockingqueue)的執行緒安全性也為開發併發程式帶來了極大方便。

private static blockingqueue<

integer

>

queue

=new arrayblockingqueue<

integer

>(10);

queue

.put();//product

queue

.take();//consumer

針對併發程式可能引起的死鎖問題給出了更為便捷的解決方案。

解決執行緒同時獲取多個互斥鎖順序不同,可能引發的死鎖(deadlock)現象。

當需要加乙個以上的互斥鎖時,使用reentrant lock避免了像synchronized語句塊一樣的巢狀。更重要的是,reentrant lock有trylock()功能,可使得當獲取到乙個互斥鎖時,另乙個獲取失敗的情況下,放棄已獲取到的互斥鎖。這就巧妙的避免了死鎖現象的出現。

private

static lock lockn=new reentrantlock();

tryfinally

(一)多執行緒之執行緒理論

一 什麼是執行緒 在傳統作業系統中,每個程序有乙個位址空間,而且預設就有乙個控制線程。執行緒顧名思義,就是一條流水線工作的過程 流水線的工作需要電源,電源就相當於cpu 而一條流水線必須屬於乙個車間,乙個車間的工作過程是乙個程序,車間負責把資源整合到一起,是乙個資源單位,而乙個車間內至少有一條流水線...

Python多執行緒(一) 多執行緒的建立

在python3中,多執行緒主要使用threading模組 首先,來看乙個單任務模式的例子 import datetime,time defeat hotpot food for i in range 2 print datetime.datetime.now strftime x eat str ...

一 多執行緒 硬體基礎

目錄1.2快取一致性協議 1.3寫緩衝佇列與無效化佇列 處理器的處理能力要遠遠高於主記憶體dram的讀寫能力。進行一次主記憶體的讀寫所需要的時間,處理器可能足夠處理上百條指令。為了彌補處理器與主記憶體巨大的效率差距,處理器的設計者們引入了快取記憶體cache。快取記憶體的容量遠小於主記憶體,但是讀取...