当先锋百科网

首页 1 2 3 4 5 6 7

在Java中,锁是一种同步的机制,用于控制并发访问共享资源。锁可以分为两种类型:独享锁和共享锁。

独享锁(Exclusive lock)是一种排他锁,它只允许同一时刻只有一个线程获得锁并访问资源。其他线程必须等待当前线程释放锁后才能获取锁并访问资源。Java中的独享锁使用的是synchronized关键字或者ReentrantLock类。

//synchronized关键字实现的独享锁
synchronized void synchronizedMethod(){
//获得锁之后可以进行操作
//……
}
//ReentrantLock实现的独享锁
private ReentrantLock lock = new ReentrantLock();
void lockMethod(){
lock.lock();//获取锁
try{
//获得锁之后可以进行操作
//……
} finally {
lock.unlock();//释放锁
}
}

共享锁(Shared lock)是一种允许多个线程同时获取锁并访问资源的锁。Java中提供了ReadWriteLock接口用于实现共享锁。

private final ReadWriteLock lock = new ReentrantReadWriteLock();
//获取读锁
void readMethod(){
lock.readLock().lock();//获取读锁
try {
//获得读锁后可以进行操作
//……
} finally {
lock.readLock().unlock();//释放读锁
}
}
//获取写锁
void writeMethod(){
lock.writeLock().lock();//获取写锁
try {
//获得写锁后可以进行操作
//……
} finally {
lock.writeLock().unlock();//释放写锁
}
}

总之,独享锁适用于对资源的独占性操作,而共享锁适用于对资源的读取和共享操作。