下面的類會更新特定時間間隔內的地圖。線程需要等待列表更新
public class CheckerThread extends Thread {
private volatile HashMap<String, Integer> map = new HashMap<>();
@Override
public void run() {
while (true) {
updateMap();
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
// Do something
}
}
}
private void updateMap() {
HashMap<String, Integer> localMap = new HashMap<>();
int count = 0;
while (count < 10) {
localMap.put(count + "a", count);
count++;
}
this.map = localMap;
}
public Map<String, Integer> getMap() {
return this.map;
}
}
下面的Class調用方法getMap()來獲取Map。在返回類「CheckerThread」中的地圖之前,我需要確保列表完全更新。該方法應該等到地圖更新。
public class GetterThread extends Thread {
private final CheckerThread checkerThread;
public GetterThread(final CheckerThread checkerThread) {
this.checkerThread = checkerThread;
}
@Override
public void run() {
System.err.println(this.checkerThread.getMap());
}
}
另一個類Main創建線程。
public class MainThread extends Thread {
public static void main(final String[] args) throws InterruptedException {
int i = 0;
GetterThread[] getterThreads = new GetterThread[5];
CheckerThread checkerThread = new CheckerThread();
checkerThread.start();
while (i < 5) {
getterThreads[i] = new GetterThread(checkerThread);
getterThreads[i].start();
Thread.sleep(1000);
i++;
}
}
}
}
答案必須使用自定義類還是可以使用Java標準API中的類? (另外,絕對不要忽略'InterruptedException'。) – markspace
你永遠不會在你的'updateMap'方法中增加'count'變量,它將永遠運行 –
這不是實際的代碼。這只是功能的概述。所以忽略數量和例外。無論如何謝謝你的更正。 – prithivraj