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

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) 可以减小锁的粒度,提高性能

猜你喜欢

转载自atongyeye.iteye.com/blog/2303940
今日推荐