1
所以我需要創建線程的ArrayList但根據爲什麼我必須同步線程的ArrayList?
Java - Filling an ArrayList of Threads with loop
看來,我需要使用synchronized關鍵字,那麼我的問題是:
,如果im調用這個只在主線程爲什麼我必須使用synchronized關鍵字?有沒有其他線程可能會做同樣的權利?
ArrayList<Thread> t = new ArrayList<Thread>();
for(int i=0;i<love.size();i++){
BTConnection cbtc = love.get(i).btc;
if(cbtc!=null){
Communicate temp = new Communicate(cbtc);
Thread ttemp = new Thread(temp);
ttemp.start();
t.add(ttemp);
}
}
而且如果正確我用下面的代碼:
for(int i=0;i<t.size();i++){
t.get(i).join();
}
是否爲循環停止,直到第i個線程返回,然後繼續等待第i + 1?
你的問題格式化和制定得很好。因爲我看到這是你的第一個問題的榮譽。請記住,語言標籤可能是最重要的語言標籤,因此,遵循他們熟練使用的語言標籤的用戶可以看到您強調的問題。 – bolov 2014-08-30 17:54:04
如果兩個或多個線程可能同時訪問和修改同一個對象,則需要某種同步。在你的情況下,只有主線程知道't',它從任何創建的'Communicate'對象都是不可見的。你可能需要在這些'BTConnection'上同步,因爲這些*可以被主線程和創建的線程訪問,但是你必須做一些非常奇怪的事情(爲什麼你要在多線程中使用一個連接?)實際上成爲一個問題。 – 2014-08-30 18:11:04
@MattiasBuelens那麼,在循環的每次迭代中,連接都應該不斷變化......我錯了嗎? – user217354 2014-08-30 20:45:35