Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a14c7ab

Browse files
Merge pull request frank-lam#46 from wuyc/master
Update 03-Java并发编程.md
2 parents 6d8b051 + ed8f05f commit a14c7ab

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

‎notes/JavaArchitecture/03-Java并发编程.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -770,7 +770,7 @@ ReentrantLock 多了一些高级功能。
770770
- (用法)synchronized(隐式锁):在需要同步的对象中加入此控制,synchronized 可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。
771771
- (用法)lock(显示锁):需要显示指定起始位置和终止位置。一般使用 ReentrantLock 类做为锁,多个线程中必须要使用一个 ReentrantLock 类做为对象才能保证锁的生效。且在加锁和解锁处需要通过 lock() 和 unlock() 显示指出。所以一般会在 finally 块中写 unlock() 以防死锁。
772772
- (性能)synchronized 是托管给 JVM 执行的,而 lock 是 Java 写的控制锁的代码。在 Java1.5 中,synchronize 是性能低效的。因为这是一个重量级操作,需要调用操作接口,导致有可能加锁消耗的系统时间比加锁以外的操作还多。相比之下使用 Java 提供的 Lock 对象,性能更高一些。但是到了 Java1.6 ,发生了变化。synchronize 在语义上很清晰,可以进行很多优化,有<u>适应自旋,锁消除,锁粗化,轻量级锁,偏向锁</u>等等。导致 在 Java1.6 上 synchronize 的性能并不比 Lock 差。
773-
- (机制)**synchronized 原始采用的是 CPU 悲观锁机制,即线程获得的是独占锁**。独占锁意味着其他线程只能依靠阻塞来等待线程释放锁。**Lock 用的是乐观锁方式**所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁实现的机制就是 CAS 操作(Compare and Swap)。
773+
- (机制)**synchronized 原始采用的是 CPU 悲观锁机制,即线程获得的是独占锁Lock 也属于悲观锁**独占锁意味着其他线程只能依靠阻塞来等待线程释放锁。相对而言乐观锁每次不加锁,而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁实现的机制就是 CAS 操作(Compare and Swap)。
774774

775775

776776

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /