首页 > 编程语言 > 详细

多线程并发第一讲:线程同步

时间:2016-06-12 03:50:33      阅读:234      评论:0      收藏:0      [点我收藏+]

1 什么是线程安全

线程安全:当多个线程访问同一个类(对象或方法)时,如果这个对象始终能表现出正确的行为,那么认为这个类(对象或方法)是线程安全的。

?

2 synchronized 关键字解释

synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为 “临界区”或“互斥区”。

synchronized取得的锁都是对象锁,而不是把一段代码当锁。所以代码中哪个线程先执行synchronized的方法,哪个线程就持有该方法所属对象的锁。

?

在静态方法上加synchronized关键字,表示锁.class类,类一级别的锁。

?

3 对象锁的同步和异步

有两个线程T1,T2 。 ? ?T1先持有对象O的锁。

1) T2可以异步调用O对象的非synchronized修饰的方法。

2) 如果这个时候T2调用O对象synchronized修饰的方法,则需等待,也就是同步。

?

4 脏读

业务整体需要使用完整的synchronized,保持业务的原子性。

?

5 死锁

在设计程序时应该避免双方相互持有对方的锁的情况

线程T1,T2 ?

在T1的同步代码块里,同步调用T2的同步代码块

在线程T2的同步代码块里,同步调用T1的代码块

伪代码

synchronized ?(m1) {

? ? ? ?synchronized (m2){

? ? ? ?}

}

synchronized ?(m2){

? ??synchronized (m1){

? ? ? ?}

}

?

6 代码块加锁

1) 使用sychronized代码块加锁,比较灵活。

2) 可以减小锁的粒度,提高性能

?

多线程并发第一讲:线程同步

原文:http://atongyeye.iteye.com/blog/2303940

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!