Synchronized 分为实例锁和全局锁.
实例锁为 synchronized(this) 和 非static synchronized方法. 也加对象锁. 只要一个线程访问这类的一个synchronize方法, 其他的synchronized方法也将被阻塞.
全局锁 synchronized(.class) 和static synchronize方法, 同样也是一个线程只能同时访问一个方法
实例锁和全局锁 一起用的话 起不到同步的作用
public
synchronized
void
increase() {
inc++;
}
上面是synchronized的实现方法;
Lock lock =
new
ReentrantLock();
public
void
increase() {
lock.lock();
try
{
inc++;
}
finally
{
lock.unlock();
}
}
下面是lock的做法,是相同的.
如果是简单的加减的做法java.util.concurrent.atomic提供了原子类
public
AtomicInteger inc =
new
AtomicInteger();
public
void
increase() {
inc.getAndIncrement();
}
这个做法等同于上的