我有一个由多个线程访问的ArrayList。主线程仅清除列表,其他人添加到列表中。我不希望列表被清除,而另一个线程正在向它添加项目。我希望列表在线程添加项目时锁定。Java列表同步
这是增加线程的代码:
synchronized (items)
{
int length = jsonArray.length();
if ((length > 0)) for (int i = 0; i < length; i++)
{
items.add(new Item(jsonArray.getJSONObject(i)));
}
}
但我不使用synchronized块进行结算。清除同步块是否必要?
那么,我得到的是synchronized块不完全锁定列表,它只锁定它在这种情况下从其他添加线程? – Ali
如果某个线程在主线程执行清除操作时开始添加该怎么办? –
'synchronized(items)'在这里阻止'items.add(t)'的多个simulatenous调用。由于缺乏“同步”,“清除”程序甚至不知道或关心锁。 –