[英]Java concurrent programming - synchronizing array
假設我有四個班級:聚會,生物,工作,物品。
派對有生物
締約方有項目
生物有工作(線程)
工作需要物品
我在確定如何同步各個項目時遇到麻煩,因此沒有作業可以同時訪問一個項目。 我以表格的形式整理了聚會中所有可用物品的清單
ArrayList<ItemInstance>
其中ItemInstance具有一個Item和一個表示數量的整數。 我不知道如何在此列表上執行鎖定
ReentrantLock resourceLock = new ReentrantLock();
ArrayList<Condition> resourceConditions = new ArrayList<Condition>();
我曾考慮過這樣做,但是鎖定resourceLock會鎖定所有項目,對嗎? 另外,我需要鎖定特定數量的商品。 所以我的數組條目可能是
(Swords, 4)
在我的主列表中,但我可能只需要用3把劍來完成我的工作。 我是否應該將它們全部存儲在單個列中並刪除數量?
總體概念是,我有一個包含所有項目和數量的大聚會清單,然后我有很多工作,而所需的項目和數量卻很少。 我試圖讓我的Jobs線程等待每個項目足夠多,執行,然后釋放要重用的項目。
PartyList =
(Swords, 7)
(Forks, 2)
(Bottles, 5)
JobEatList =
(Forks, 1)
//RUN THREAD
PartyList =
(Swords, 7)
(Forks, 1)
(Bottles, 5)
JobDineList =
(Bottles, 2)
(Forks, 4)
//WAIT
您應該列出要執行的並發操作(類的方法)的列表。 概述它們的依存關系和不變量,因此您知道可以同時執行哪些操作以及必須對其進行序列化(同步)。 將您的工作定義為大多數獨立的任務,以實現最大的並發和最小的阻塞。 好好看一下java.util.concurrent
必須提供什么,尤其是Semaphore
等更高級別的類。
抱歉,這聽起來太籠統了。
首先,正如其他人所指出的,您需要更加清楚地了解和/或分析您想做的事情。
其次,一種“對程序員來說容易”的方法是對任何“棘手的”使用CopyOnWriteArrayList
。 就速度而言,它可能不是最高效的,但是對於您的應用程序來說,它可能足夠快。 至少要考慮一下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.