线程同步(二)-Lock(转载)
之前谈到,java提供了synchronized进行线程同步处理,在JDK1.5后,便出现了Lock,两者的区别是:
?
Class Test{public static User user=null;Lock lock=new ReentrantLock(); Public void add(User u){lock.lock(); user=u; Dao.save(user);lock.unlock();}finally{lock.unlock();}}?这样无论你new多少个对象都会是线程同步的
相当于
Public static synchronized void add(User u)
{
???? user=u;
???? Dao.save(user)
}
总结:synchronized 修饰方法时 表示同一个对象在不同的线程中 表现为同步队列
如果实例化不同的对象 那么synchronized就不会出现同步效果了。而Lock有比Synchronized更精确的线程语义和更好的性能
Synchronized会自动释放锁,但是Lock一定要求程序员手工释放,并且必须在finally从句中释放。
?