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