[英]How to make a shared resource thread-safe when using dependency injection?
[英]How to avoid breaking encapsulation when using dependency injection
在閱讀並觀看了有關依賴注入的一些視頻后,我仍然不了解如何正確使用它而不破壞封裝。
注意:我閱讀了如何在不破壞封裝的情況下使用依賴注入? 但我仍然不確定100%。
我的代碼是線程池的一個非常簡單的實現,其中包含類Worker
對象,該對象是我不想公開給外界的包私有類(這實際上與他們無關)。
我的線程池構造函數需要一個參數Worker[] workers
(我不需要工廠,因為我事先確切知道我需要多少個工人)。
由於我的Worker
類是程序包私有的,因此我認為構建線程工廠的正確方法是在ThreadPool
類中實現靜態工廠方法,如下所示:
public static ThreadPool createThreadPool(int numOfWorkers,
BlockingQueue<Runnable> jobQueue,
ThreadFactory threadFactory) {
Worker workers[] = new Worker[numOfWorkers];
for (int i = 0; i < workers.length; i++) {
workers[i] = new Worker(jobQueue, threadFactory, i);
// worker needs the factory in order to provide itself as Runnable
}
return new ThreadPool(workers, jobQueue);
}
因此,在靜態工廠方法中創建所有這些新對象是否是從其他程序包中隱藏Worker
類的正確方法,還是我在這里缺少什么?
依賴注入將意味着從ThreadPool
隱藏Worker
的創建。 理想情況下,應該將Runnable
傳遞到ThreadPool
構造函數中,並且ThreadPool
甚至不應該知道Runnable
恰好是Worker
。
Worker
的創建應在組合根目錄中進行 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.