首先为什么要同步:为了提高程序的运行效率,在程序中会使用多线程的技术,但是多线程并发访问同一数据时, 有可能出现线程安全问题, 这时就要使用线程同步技术来解决数据安全的问题。比如销售火车票,在使用多线程技术的时候,如果不采用线程同步,那么可能会造成火车票重复这样的数据安全问题。所以java提供了线程同步的方法。
在jdk1.5版本出现之前,线程同步是如下操作的:
1、代码块同步:synchronized(锁对象){同步代码}
2、方法(函数)同步:如果整个方法的代码都是需要同步, 那么可以在方法声明的进修用synchronized来修饰,比如:public synchronized void fun(){}
在jdk1.5版本出现以后:
1.线程同步:使用ReentrantLock类的lock()方法开始同步, 使用unlock()方法结束同步。
2.线程通信:
(1)使用ReentrantLock类的newCondition()方法来获取Condition类对象。
(2)调用Condition的await()方法等待, 调用Condition的signal()方法唤醒。
其实楼主可以把lock()理解为synchronized这样会好理解些。
|