[問題] 關於靜態變數的存取

作者: lueichun (no anonymous)   2018-12-15 12:30:42
我寫了一段存取靜態變數的code:
public class SetConnectionsServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
......
public static List<Connection> list = new ArrayList<>();
}
然後我透過多執行緒,取得connection物件,並寫入上面那個arrayList:
SetConnectionForMultiThread[] smtArray = new SetConnectionForMultiThread[200];
Thread[] thrArray = new Thread[200];
int j = 0;
for(int i = 0;i<200;i++){
smtArray[j] =
new SetConnectionsForMultiThread();
thrArray[j] = new Thread(smtArray[j]);
thrArray[j].start();
j++;
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
然後在SetConnectionForMultiThread這個class裡:
public class SetConnectionForMultiThread implements Runnable{
public void run(){
......
SetConnectionsServlet.list.add(connection);
}
}
作者: ssccg (23)   2018-12-15 13:14:00
沒有差,不是其他地方寫錯就是判斷有沒有加的方法是錯的另外會被多個thread存取的list需要synchronize
作者: gasbomb (虛空雷神獸)   2018-12-15 13:16:00
原本class底下寫一個addList()給其他class用比較妥當吧
作者: AI3767 (AIIA)   2018-12-15 22:38:00
我寫一個測試是ok的, 但,你有兩個不同類別名的 Multi
作者: pttworld (批踢踢世界)   2018-12-16 13:21:00
貼文是手誤嗎,迴圈跑的j根本沒加1啊i跑到200,可是j根本沒動吧
作者: AI3767 (AIIA)   2018-12-16 23:44:00
SetConnectionForMultiThread vs. SetConnections...

Links booklink

Contact Us: admin [ a t ] ucptt.com