synchronized和static synchronized的比较
2014-04-08 18:28
211 查看
pulbic class Something(){ public synchronized void isSyncA(){} public synchronized void isSyncB(){} public static synchronized void cSyncA(){} public static synchronized void cSyncB(){} }
那么,加入有Something类的两个实例a与b,那么下列组方法何以被1个以上线程同时访问呢
a. x.isSyncA()与x.isSyncB() b. x.isSyncA()与y.isSyncA() c. x.cSyncA()与y.cSyncB() d. x.isSyncA()与Something.cSyncA()
a,都是对同一个实例的synchronized域访问,因此不能被同时访问
b,是针对不同实例的,因此可以同时被访问
c,因为是static synchronized,所以不同实例之间仍然会被限制,相当于Something.isSyncA()与 Something.isSyncB()了,因此不能被同时访问。
那么,第d呢?,书上的 答案是可以被同时访问的,答案理由是synchronzied的是实例方法与synchronzied的类方法由于锁定(lock)不同的原因。
个人分析也就是synchronized 与static synchronized 相当于两帮派,各自管各自,相互之间就无约束了,可以被同时访问。目前还不是分清楚java内部设计synchronzied是怎么样实现的。
结论:
A: synchronized static是某个类的范围,synchronized static cSync{}防止多个线程同时访问这个 类中的synchronized static 方法。它可以对类的所有对象实例起作用。
B: synchronized 是某实例的范围,synchronized isSync(){}防止多个线程同时访问这个实例中的synchronized 方法。
相关文章推荐
- synchronized和static synchronized的比较
- synchronized和AtomicInteger解决并发问题的性能比较
- synchronized和volatile比较
- Java多线程之内存可见性——synchronized与volatile比较
- synchronized 对象锁和 ReentrantLock非公平锁tryLock() 的比较
- ReentrantLock和synchronized比较
- Java 8:StampedLock,ReadWriteLock以及synchronized的比较
- 内存可见性和原子性:Synchronized和Volatile的比较
- 4000 内存可见性和原子性:Synchronized和Volatile的比较
- (转)Lock和synchronized比较详解
- (转)Lock和synchronized比较详解
- volatile和synchronized的比较
- JAVA的synchronized关键字与concurrent并发包的性能比较。
- <转>一道面试题比较synchronized和读写锁
- Synchronized和ThreadLocal使用的比较
- synchronized和lock比较浅析
- (转)Lock和synchronized比较详解
- Hashtable、synchronizedMap、ConcurrentHashMap 比较
- synchronized和volatile比较
- (转)Lock和synchronized比较详解