在我的作业中,我需要展示代码中读/写锁和“同步”关键字使用之间的区别。我真的不知道该怎么做,以及理解这种差异的明确方法是什么。我还需要显示以两种方式执行同一任务的时间差。这是我尝试过的代码(虽然没有同步)public class Main { public static void main(String[] args) { Number number = new Number(5); Thread t1 = new Thread(){ public void run(){ System.out.println(number.getData()); number.changaData(10); System.out.println(number.getData()); }}; Thread t2 = new Thread(){ public void run(){ try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(number.getData()); number.changaData(20); System.out.println(number.getData()); }}; t2.start(); t1.start(); }}public class Number { private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); private final Lock readLock = rwl.readLock(); private final Lock writeLock = rwl.writeLock(); int value; public Number(int value) { this.value = value; } public int getData() { readLock.lock(); try { return value; } finally { readLock.unlock(); } } public int changaData(int change) { writeLock.lock(); try { value = change; return value; } finally { writeLock.unlock(); } }}
1 回答
慕桂英4014372
TA贡献1871条经验 获得超13个赞
同步锁和读/写锁之间的区别在于,当您使用同步锁时,它一次只允许一个线程访问。使用读/写锁,您可以同时拥有多个读取器(假设已经没有写锁),因此您可以在某些情况下获得更好的并发性能,尤其是当这里有很多读取时。
您应该添加更多访问此对象的线程以测试性能。
您可以简单地计算完成和开始操作之间的时间来衡量性能(例如 - Long startTime = System.nanoTime();)。
添加回答
举报
0/150
提交
取消