多執行緒之 FutureTask

2021-09-16 18:57:36 字數 786 閱讀 1344

兩種使用場景:

1.非同步任務:

主線程繼續執行,當主線程需要非同步執行緒的結果時,直接去調非同步執行緒就可以

注意一點:對於多執行緒共享的物件,採用volatile+unsafe的方法,代替鎖操作,這個是很重要的一點操作

/**

* 獲取任務的執行結果用乙個集合儲存

*/public class futuretaskformulticompute

return result;

}});

tasklist.add(ft);

}}

2.乙個任務只能被多個執行緒中的其中乙個執行緒執行,其他的執行緒等待這個執行緒執行完之後接著執行

private final concurrenthashmap> taskcache = new concurrenthashmap<>();

private string executiontask(final string taskname)

};futuretaskfuturetask = new futuretask<>(task);

future = taskcache.putifabsent(taskname, futuretask);

if (future == null)

}try catch (interruptedexception e) catch (executionexception e)

}}

有兩篇部落格寫的很不錯:

多執行緒之執行緒同步

pulse lockobj 表示釋放當前被lock的lockobj,容許其他執行緒呼叫。相當於暫時掛起當前執行緒 wait lockobj 表示等待當前被其他執行緒占用的lockobj。下面的 將會交替執行兩個執行緒 class ticktock console.write tick monitor...

多執行緒之執行緒池

執行緒框架關係 executor 介面 executorservice 介面 繼承 executor abstractexecutorservice 抽象類 實現 executorservice threadpoolexecutor 繼承abstractexecutorservice 過載一系列方法...

多執行緒之執行緒池

首先說一說執行緒池的優點 方便管理,監控執行緒狀態 提高執行緒響應速度 執行緒可以重複使用 executorservice普通排程池核心介面 submit runnable callable future execute runnable void 執行緒池工作流程 當任務到達執行緒池時的工作順序,...