多线程设计模式 | Single Threaded Execution

2017-08-11

多线程程序设计的难点

Single Threaded Execution模式

该模式用于设置限制,以确保同一时间内只能让一个线程执行处理。

synchronized的作用

适用场景

生存性与死锁

死锁是指两个线程分别持有着锁,并互相等待对方释放锁的现象。

满足下列条件时,死锁就会发生:

只要破坏三个条件中的一个,就可以防止死锁发生。

临界区的大小和性能

一般情况下,该模式会降低程序性能,原因如下:

解决方式:尽可能地缩小临界区的范围,降低线程冲突的概率。

关于synchronized

synchronized语法

// synchronized方法
synchronized void method() {}

// synchronized代码块
synchronized (obj) {}

// synchronized方法和代码块无论是执行return还是抛出异常,都一定能够释放锁。

// 显式处理锁的方法
void method() {
    lock();
    // do something
    // 若这中间存在return或调用的方法抛出异常时,那么锁就有可能无法被释放
    unlock();
}

synchronized在保护着什么

synchronized就像是门上的锁。当看到门上了锁时,还应该确认其他的门和窗户是不是都锁好了。只要是访问多个线程共享的字段的方法,就需要使用synchronized进行保护。

该以什么单位来保护

原子操作(不可分割的操作)

使用哪个锁保护

参考资料