我有一个消费者和一个生产者,从队列中添加和删除Item对象。如果我使用put()
和take()
方法。我还需要覆盖哪些线程安全问题?这与有界缓冲区问题类似,我只是想知道是否使用阻塞队列取代了信号量或监视器的需要。 Item对象本身可能需要同步(setters,但getter不需要锁定),对吗?最后,我不太确定如何测试它是否是线程安全的,因为我不能同时使两个线程都调用take()
,因为执行顺序是不确定的。有任何想法吗?谢谢。使用LinkedBlockingQueue足够好用于多线程Java程序吗?
8
A
回答
7
这对你所做的事情来说是完全线程安全的,实际上这就是它的设计目的。的BlockingQueue
的描述(其是由LinkedBlockingQueue
实现的接口)规定:
BlockingQueue实现是线程安全。所有排队方法 使用并发控制的内部锁或其他形式 原子地实现其效果。
1
同时put()方法,并采取()是不线程安全,因为它们使用2个不同的锁。
这是已经在这里找到答案:Are LinkedBlockingQueue's insert and remove methods thread safe?
+0
我按照链接找到了另一篇文章的答案,解释了为什么它是线程安全的。 http://stackoverflow.com/questions/26543807/is-blockingqueue-completely-thread-safe-in-java/26543940#26543940 – user1266174
相关问题
- 1. UITextView足够用于简单的写作应用程序吗?
- 2. Java:足够易于使类进行线程安全?
- 3. 对于Windows而言,多媒体丰富的应用程序是否足够好?
- 4. 有多少线程最好使用? (java)
- 5. 构建于ASP.NET Membership Hashing足够好吗?
- 6. C#多线程没有使用足够的CPU
- 7. 多线程在asp.net web应用程序中很好用吗?
- 8. Java多线程程序如何能够使用多个CPU内核?
- 9. 好或不好主意:基于Java的多用户基于Servlet的Web应用程序中的多线程
- 10. 是std :: mutex足够用于线程之间的数据同步
- 11. 如何在Java中使用LinkedBlockingQueue创建线程池?
- 12. 在多线程应用程序中使用类变量不好吗?
- 13. LinkedBlockingQueue只返回多个线程之一
- 14. 关于多线程java应用程序的序列图
- 15. 关于多线程的java多线程
- 16. Android:EXTERNAL_CONTENT_URI足够用于照片库吗?
- 17. Ruby线程不够好?
- 18. Xamarin足够开发社交平台应用程序吗?
- 19. 为了部署Play应用程序,“activator dist”足够吗?
- 20. 能够在多个线程中使用吗?
- 21. Java中的多线程应用程序?
- 22. 分析多线程Java应用程序
- 23. ImageBrush能够工作多线程吗?
- 24. 多线程Java应用程序是否会很好地利用多核机器?
- 25. 多路复用Java的LinkedBlockingQueue
- 26. 对于商业应用程序,html5是否足够强大?
- 27. 对于大ajaxy应用程序是否足够$ .empty()?
- 28. 测试iPhone应用程序时,仅使用Leaks仪器就足够了吗?
- 29. Lua最少公用多个程序没有足够的内存
- 30. PingPong程序Java多线程
虽然执行的顺序是不确定的,不会有证据表明,LBQ不够好,如果你''把()''不会出现某些项目,或者来自''take()''的结果反复出现相同的项目项? –
我想这是一个可能的测试,但它可能并不总是一个线程特定的测试。也许在调用take()时使用线程休眠,而其他线程也调用它? – Dan
默认情况下,Executors使用的是什么,这导致了我的问题;你不能使用一个封装队列和线程池的ExecutorService吗? –