基本上解决线程冲突都是采用 给定时刻只允许一个任务访问共享资源。
通常是通过在代码前加上一条锁语句来实现。
Java提供关键字synchronized。
synchronized void f();
所有对象都自动含有单一的锁,当在该对象上调用其任意synchronized方法时,此对象被加锁,
这时该对象上其他的synchronized方法只能等前一个方法调用完毕释放了锁才能被调用。
注意,希望加锁的域设定为private非常必要。否则,synchronized不能防止对它的直接访问,而导致锁失效。
(比喻,你在出门时上锁是对的,前提是你的屋子是封闭的,如果是四面透风,你锁了门也没有用。)
private static Object _lock = new Object();