java8读写锁如何使用

2025-11-08 16:02:34

1、读写锁的使用环境:

写写和读写需要“互斥”

读读不需要互斥

java8读写锁如何使用

2、新建一个java类ReadWriteLockDemo

class ReadWriteLockDemo {

    private int number = 0;

    

    public void get() {

        System.out.println(Thread.currentThread().getName() + ":" + number);

    }

    

    public  void set(int number) {

        System.out.println(Thread.currentThread().getName());

        this.number = number;

    }

}

java8读写锁如何使用

3、使用ReadWriteLock控制线程安全

private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

java8读写锁如何使用

4、使用读锁控制get()方法

 public void get() {

        readWriteLock.readLock().lock();

        try {

            System.out.println(Thread.currentThread().getName() + ":" + number);

        }finally {

            readWriteLock.readLock().unlock();

        }

    }

java8读写锁如何使用

5、使用写锁控制set()方法

public  void set(int number) {

        this.readWriteLock.writeLock().lock();

        try {

            System.out.println(Thread.currentThread().getName());

            this.number = number;

        }finally {

            this.readWriteLock.writeLock().unlock();

        }

    }

java8读写锁如何使用

6、使用一个线程写数据,100个线程读数据

 public static void  main(String[] args) {

        ReadWriteLockDemo readWriteLockDemo = new ReadWriteLockDemo();

        

        new Thread(new Runnable() {

            @Override

            public void run() {

                readWriteLockDemo.set((int)(Math.random()*101));

            }

        },"Write:").start();

        

        for(int i = 0;i< 100;i++) {

            new Thread(new Runnable() {

                @Override

                public void run() {

                    readWriteLockDemo.get();

                }

            },"Read:").start();

        }

    }

}

java8读写锁如何使用

7、整体程序代码如下:

package com.gwolf;

import java.util.concurrent.locks.ReadWriteLock;

import java.util.concurrent.locks.ReentrantReadWriteLock;

public class TestReadWriteLock {

    public static void  main(String[] args) {

        ReadWriteLockDemo readWriteLockDemo = new ReadWriteLockDemo();

        

        new Thread(new Runnable() {

            @Override

            public void run() {

                readWriteLockDemo.set((int)(Math.random()*101));

            }

        },"Write:").start();

        

        for(int i = 0;i< 100;i++) {

            new Thread(new Runnable() {

                @Override

                public void run() {

                    readWriteLockDemo.get();

                }

            },"Read:").start();

        }

    }

}

class ReadWriteLockDemo {

    private int number = 0;

    private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

    

    public void get() {

        readWriteLock.readLock().lock();

        try {

            System.out.println(Thread.currentThread().getName() + ":" + number);

        }finally {

            readWriteLock.readLock().unlock();

        }

    }

    

    public  void set(int number) {

        this.readWriteLock.writeLock().lock();

        try {

            System.out.println(Thread.currentThread().getName());

            this.number = number;

        }finally {

            this.readWriteLock.writeLock().unlock();

        }

    }

}

java8读写锁如何使用

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢