读写锁:
* 写操作需要独占锁,只允许一个进行进行写操作
* 读操作时共享锁,运行多个进行同时进行都操作
应用场景:
代码示例:
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class JucTest8
{
public static void main(String[] args)
{
/**
* 读写锁:
* 写操作需要独占锁,只允许一个进行进行写操作
* 读操作时共享锁,运行多个进行同时进行都操作
*/
Book book = new Book();
for (int i=1;i<=3;i++)
{
new Thread(()->
{
book.writing();
},"A"+i).start();
new Thread(()->
{
book.reading();
},"B"+i).start();
}
}
}
class Book
{
ReadWriteLock lock = new ReentrantReadWriteLock();
void writing()
{
lock.writeLock().lock();
try {
System.out.println(Thread.currentThread().getName()+"进行写操作");
//TimeUnit.SECONDS.sleep(2);
System.out.println(Thread.currentThread().getName()+"写入完成");
}catch (Exception e)
{
e.printStackTrace();
}
finally {
lock.writeLock().unlock();
}
}
void reading()
{
lock.readLock().lock();
try {
System.out.println(Thread.currentThread().getName()+"进行读操作");
//TimeUnit.SECONDS.sleep(2);
System.out.println(Thread.currentThread().getName()+"读完成");
}catch (Exception e)
{
e.printStackTrace();
}
finally {
lock.readLock().unlock();
}
}
}