声明:内容来自公众号“我们都是小青蛙”,此文章只作为学习笔记
为什么要设计线程安全的类?
假设设计了这样一个类:
public class Increment {
private int i;
public void increase() {
i++;
}
public int getI() {
return i;
}
}
聪明的程序员会使用同步操作,结果这样:
public class RightUsageOfIncrement {
public static void main(String[] args) {
Increment increment = new Increment();
Thread[] threads = new Thread[20]; //创建20个线程
for (int i = 0; i < threads.length; i++) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100000; i++) {
synchronized (RightUsageOfIncrement.class) {
// 使用Class对象加锁
increment.increase();
}
}
}
});
threads[i] = t;
t.start();
}
for (int i = 0; i < threads.length; i++) {
try {
threads[i].join();
} catch (