Fav*_*ius 3 java concurrency multithreading
在下面的两个同步策略中,哪一个被优化(如在处理和生成的字节代码中)以及应该使用其中一个的场景.
public synchronized void addName(String name)
{
lastName = name;
nameCount++;
nameList.add(name);
}
Run Code Online (Sandbox Code Playgroud)
要么
public void addName(String name) {
synchronized(this) {
lastName = name;
nameCount++;
nameList.add(name);
}
}
Run Code Online (Sandbox Code Playgroud)
还有什么是处理并发的可行方法:
java.util.concurrent包Job或UIJobAPI(如果在eclipse PDE环境中工作)谢谢
java.util.concurrent是非常preferrable使用同步原语只要有可能,因为它可以让你在更高的抽象级别上工作,并用它的作者是非常熟练的人,测试集中的代码.哪一个被优化(如在处理和生成的字节代码中)
根据这篇IBM DeveloperWorks文章第1节,与synchronized块相比,synchronized方法生成的字节码更少.这篇文章解释了原因.
文章摘录:
当JVM执行synchronized方法时,执行线程识别方法的method_info结构设置了ACC_SYNCHRONIZED标志,然后它自动获取对象的锁,调用方法并释放锁.如果发生异常,则线程会自动释放锁.
另一方面,同步方法块绕过JVM内置的对获取对象锁和异常处理的支持,并要求以字节代码显式写入功能.如果您读取具有同步块的方法的字节代码,您将看到十几个额外的操作来管理此功能.清单1显示了生成synchronized方法和synchronized块的调用:
编辑发表第一条评论
为了给其他SOers信用,这里有一个很好的讨论为什么人们会使用同步.块.如果你搜索一下,我相信你可以找到更多有趣的讨论:)
我个人没有必要使用同步.阻止锁定另一个对象this,但这是一个使用SOers指出同步.块.
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |