多執行緒中一些介面及類之間的關係

2021-10-01 02:18:23 字數 1396 閱讀 2479

runnale:介面,裡面有乙個run方法,無返回值,代表乙個任務。

callable:介面,裡面有乙個帶返回值的方法call,返回值為泛型t,也代表乙個任務。

futher:介面,裡面有五個重要的方法,用來獲取任務及其狀態。

cancle(***):***是乙個boolean型別的值,為true代表可以取消正在執行的任務。

iscancled():判斷當前任務是否已經取消掉

isdone():判斷當前任務是否已經做完

get() ,get(time ,utile.time):獲取任務返回值,未執行完任務時阻塞。帶時間的表示等待指定時間後,如果還未執行完就不在等待獲取結果了。

runnalefuther:繼承了runnale與futher介面。

futhertask:實現了runnabletuther介面。 構造器需要乙個callable的實現類。 可以看出runnablefuture繼承了runnable介面和future介面,而futuretask實現了runnablefuture介面。所以它既可以作為runnable被執行緒執行,又可以作為future得到callable的返回值。

executer:頂級介面,宣告了乙個execute(runnale)方法,用來提交任務。

executerservice:繼承executer介面,並新增了futher submit(runnable),futher submit(callable),shutdown()。

abstractexecuterservice:實現了executerservice介面,並實現了所有方法

threadpoolexecuter:繼承了abstractexecuterservice。

幾個重要的方法:

execute()

submit()

shutdown()

shutdownnow()

execute()方法實際上是executor中宣告的方法,在threadpoolexecutor進行了具體的實現,這個方法是threadpoolexecutor的核心方法,通過這個方法可以向執行緒池提交乙個任務,交由執行緒池去執行。

submit()方法是在executorservice中宣告的方法,在abstractexecutorservice就已經有了具體的實現,在threadpoolexecutor中並沒有對其進行重寫,這個方法也是用來向執行緒池提交任務的,但是它和execute()方法不同,它能夠返回任務執行的結果,去看submit()方法的實現,會發現它實際上還是呼叫的execute()方法,只不過它利用了future來獲取任務執行結果

Linux中一些簡單的多執行緒gdb除錯方法

先介紹一下gdb多執行緒除錯的基本命令。顯示當前可除錯的所有執行緒,每個執行緒會有乙個gdb為其分配的id,後面操作執行緒的時候會用到這個id。前面有 的是當前除錯的執行緒。切換當前除錯的執行緒為指定id的執行緒。在所有執行緒中相應的行上設定斷點 讓乙個或者多個執行緒執行gdb命令command。讓...

PG, Pool之間的一些數量關係

先說一下我的環境 ceph cluster中包含6臺osd節點 osd.0 5 一共有10個pool 0 9 這些pool共享了144個pg 這個數字是所有pool的pg size相加,並不是通過ceph osd pool create poolname pg size指定的 檔案拷貝數量等於2 o...

一些多執行緒的筆記

1.保護方法原子性的同時,也要注意保護方法中使用到的變數。下面這段 是否一定安全?public class counter public synchronized void add1 other method 不一定,如果在other method中也處理counter但是又沒有保護的情況下,會出現...