ArrayDeque 和 synchronized

superliyubo 2010-01-26 03:19:27
在一个程序中定义一个公共静态的ArrayDeque



public static ArrayDeque Queue = null;




多个线程对 Queue 执行 add (只执行add)


...
Queue.add(str);
...





单独有1个线程执行


...
while(!Queue.isEmpty()){

String temp_str = Queue.pollFirst().toString();
....
}
...




请教不加synchronized可以吗?求教。
...全文
90 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
可以不用加,呵呵。

如果是无界队列的话,如果队列中满了,那添加数据也会阻塞的。

一般有两种获取或添加数据的方法,一种是非阻塞的,另一种是阻塞的,具体的看一下 API DOC 就知道了。
superliyubo 2010-01-26
  • 打赏
  • 举报
回复
add的时候可以不加吧
superliyubo 2010-01-26
  • 打赏
  • 举报
回复
对我就是要这个效果 谢谢
  • 打赏
  • 举报
回复
不行,因为静态字段是每个实例之间共享的,必须加同步。

while(!Queue.isEmpty()){

String temp_str = Queue.pollFirst().toString();
....
}

你的要求是这样的,使用 LinkedBlockingDeque 这个阻塞的双端队列是最好不过了,可以使用 take, takeFirst 方法,有数据时就取,否则就阻塞直到有数据。
  • 打赏
  • 举报
回复
建议使用 LinkedBlockingDeque 这是唯一线程安全的 Deque 可以不用同步关键字。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧