如何确定需要同步哪部分Java代码?

时间:2009-10-14 09:31:52

标签: java concurrency synchronization

如何确定需要同步的Java代码的一部分?有没有单元测试技术?

欢迎使用代码示例。

6 个答案:

答案 0 :(得分:8)

当可能有多个线程同时处理同一数据时,需要同步代码。

代码是否需要同步不是您可以通过单元测试发现的。当程序是多线程的时,您必须仔细思考和设计程序,以避免出现问题。

关于Java并发编程的好书是Java Concurrency in Practice

答案 1 :(得分:3)

这是一些一般信息的良好来源: http://weblogs.java.net/blog/caroljmcdonald/archive/2009/09/17/some-java-concurrency-tips

当你处于Java的多线程环境中并且想要并行执行许多操作时,我建议使用一种方法,该方法使用并发队列(如BlockingQueue或ConcurrentLinkedQueue)实现和一个简单的Runnable,它具有对队列并拉出队列的“消息”。使用ExecutorService来管理任务。排序(非常简化)Actor类型的模型。

因此选择尽可能不共享状态,因为如果这样做,则需要同步或使用支持并发访问的数据结构,如ConcurrentHashMap。

答案 2 :(得分:3)

如果我理解你的问题,你想知道你要同步什么。遗憾的是,没有提供的样板代码可以显示同步的内容 - 您应该查看多个线程可以同时访问的方法和实例变量。如果没有这样的话,通常不需要太担心同步。

答案 3 :(得分:1)

无法替代思考代码周围的问题(正如此处的其他答案所示)。但是,一旦你完成了这项工作,就值得在代码上运行FindBugs。它将识别您应用同步不一致的位置,并且在跟踪难以发现的错误方面提供了很大的帮助。

答案 4 :(得分:0)

这里有很多不错的答案:

Java synchronization and performance in an aspect

这里有一个很好的问题分析:

http://portal.acm.org/citation.cfm?id=1370093&dl=GUIDE&coll=GUIDE&CFID=57662261&CFTOKEN=95754288(需要访问ACM门户网站)

答案 5 :(得分:0)

是的,所有这些人都是对的 - 无法思考。但这是拇指规则.. 1.如果它是一个读 - 也许你不需要同步 如果它是'写' - 你应该考虑它......