我想创建一个静态 arrayList 用于 3 个线程之间的通信: 1. 线程将向列表添加一些数据; 2. 线程将从列表中删除数据; 3.线程(每3秒定时器)将检查列表的大小是否等于0,如果不等于则打印该列表的所有对象。
我想知道如果超过 1 个线程尝试同时访问此列表会发生什么(例如,当第二个线程从列表中删除对象时,计时器将同时检查列表的大小)。 我想我必须同步这个列表,但不知道该怎么做。你能给我一些建议吗?
最佳答案
I'm wondereing what would happen if more than 1 thread will try to access this list at same time
首先,ArrayList
不是线程安全的,因此您不应该直接使用它。
一种可能性是使用Collections.synchronizedList(...);
,它为您提供线程安全性,但会妨碍并发性。
您的要求似乎像一个Queue
,因此您应该使用BlockingQueue
,例如线程安全的LinkedBlockingQueue
。
注意:
如果您使用Collections.synchronizedList(...)
,列表上的复合操作仍然不安全。
关于java - 3个线程可以访问java中的1个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19383477/