roo*_*ron 9 java multithreading
b/w内在锁定,客户端锁定和外部锁定有什么区别?
创建线程安全类的最佳方法是什么?
哪种锁定更喜欢?为什么?
我强烈建议您阅读Brian Goetz撰写的" Java Concurrency In Practice ".这是一本很好的书,可以帮助您理解有关并发的所有概念!
关于你的问题,我不确定我是否可以回答所有问题,但我可以尝试一下.大多数时候,如果问题是"什么是最好的锁定方法"等问题,答案总是取决于你试图解决的问题.
问题1:
你在这里尝试比较的东西并不完全可比;
Java提供了一种用于锁定的内置机制synchronized.为了同步,每个对象都可以隐式地充当锁; 这些内置锁称为内部锁.
该术语的有趣之intrinsic处在于锁的所有权是每个线程而不是每个方法调用.这意味着只有一个线程可以在给定时间保持锁定.您可能还会感兴趣的是该术语reentrancy,它允许同一个线程再次获取相同的锁.内在锁是可重入的.
客户端锁定,如果我理解你的意思,是不同的东西.当您没有线程安全类时,您的客户需要注意这一点.他们需要握住锁,以确保没有任何竞争条件.
外部锁定不是使用synchronized块的内置机制,而是使用隐式锁来专门使用显式锁.它是一种更为复杂的锁定方式.有许多优点(例如,您可以设置优先级).一个很好的起点是关于锁的java文档
问题2: 这取决于:)对我来说最简单的方法是尽量保持一切不变.当某些东西不可变时,我不再需要关心线程安全了
问题3: 我在第一个问题上回答了问题
以下是一些讨论不同锁定方案的链接:
我不知道有没有一种“最佳”方法来创建线程安全类,这取决于您想要实现的目标。通常,您不必使整个类线程安全,只需保护不同线程都可以访问的资源,例如公共列表等。
| 归档时间: |
|
| 查看次数: |
5349 次 |
| 最近记录: |