在Java多线程中,可以使用synchronized关键字来实现线程之间的同步互斥,也就是上锁。在JDK1.5之中,新增了ReentrantLock类也能够达到相同的效果。并且在扩展功能上更强、更加灵活。
Lock。
Lock是一个接口,也就是ReentrantLock以及ReentrantReadWriteLock.ReadLock、ReentrantReadWriteLock.WriteLock的的接口。
Lock接口的三个实现类能够实现锁的一些操作,下面是官方的一些介绍:
以及其基本的使用方法:
Lock l = ...;
l.lock();
try {
// access the resource protected by this lock
} finally {
l.unlock();
}
并且Lock接口中有几个方法可供使用:
ReentrantLock。
使用ReentrantLock可以进行上锁操,保证了部分的线程安全以及防止出现脏读。
package testThread;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
class ThreadA extends Thread {
private TestReentrantLock testReentrantLock;
public ThreadA(TestReentrantLock testReentrantLock) {
// TODO Auto-generated constructor stub
this.testReentrantLock = testReentrantLock;
}
@Override
public void run() {
// TODO Auto-generated method stub
testReentrantLock.testA();
}
}
class TestReentrantLock {
private Lock lock = new ReentrantLock();//得到ReentrantLock对象
public void testA() {
try {
//lock.lock();//进行上锁
System.out.println("方法A拿到了锁!");
System.out.println("---begin----这里是方法A,当前线程的名字为:" + Thread.currentThread().getName());;
System.out.println("进入方法A的时间为:" + System.currentTimeMillis());
Thread.sleep(3000);//当前线程睡眠3秒
System.out.println("---end-----退出方法A的时间为:" + System.currentTimeMillis());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();