猿问

基本代码上显示的读/写锁与同步之间的区别

在我的作业中,我需要展示代码中读/写锁和“同步”关键字使用之间的区别。我真的不知道该怎么做,以及理解这种差异的明确方法是什么。我还需要显示以两种方式执行同一任务的时间差。这是我尝试过的代码(虽然没有同步)


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();

        }

    }

}


慕婉清6462132
浏览 107回答 1
1回答

慕桂英4014372

同步锁和读/写锁之间的区别在于,当您使用同步锁时,它一次只允许一个线程访问。使用读/写锁,您可以同时拥有多个读取器(假设已经没有写锁),因此您可以在某些情况下获得更好的并发性能,尤其是当这里有很多读取时。您应该添加更多访问此对象的线程以测试性能。您可以简单地计算完成和开始操作之间的时间来衡量性能(例如 - Long startTime = System.nanoTime();)。
随时随地看视频慕课网APP

相关分类

Java
我要回答