zoukankan      html  css  js  c++  java
  • 线程之ReadWriteLock

    import java.util.Random;
    import java.util.concurrent.locks.ReadWriteLock;
    import java.util.concurrent.locks.ReentrantLock;
    import java.util.concurrent.locks.ReentrantReadWriteLock;

    public class ThreadReadWriteLock {

    /**
    * 读写锁
    * 读得时候还能读
    * 读的时候不能写
    * 写的时候不能读
    * 写的时候不能写
    */
    public static void main(String[] args) {
    final ReadWrite readWrite = new ReadWrite();
    for(int i=0;i<3;i++){
    new Thread(){
    public void run() {
    while(true){
    readWrite.read();
    }
    }}.start();
    new Thread(){
    public void run() {
    while(true){
    readWrite.write(new Random().nextInt(1000));
    }
    }}.start();
    }
    }
    }
    class ReadWrite{
    Object data = null;
    ReadWriteLock rwl = new ReentrantReadWriteLock();
    public void read(){
    rwl.readLock().lock();
    try{
    System.out.println(Thread.currentThread().getName()+" ready to read data");
    Thread.sleep((long)(Math.random()*1000));
    System.out.println(Thread.currentThread().getName()+" has read " + data);
    }catch(InterruptedException e){
    e.printStackTrace();
    }finally{
    rwl.readLock().unlock();
    }
    }
    public void write(Object data){
    rwl.writeLock().lock();
    try{
    System.out.println(Thread.currentThread().getName()+" ready to write data");
    this.data = data;
    Thread.sleep((long)(Math.random()*1000));
    System.out.println(Thread.currentThread().getName()+" has written " + data);
    }catch(InterruptedException e){
    e.printStackTrace();
    }finally{
    rwl.writeLock().unlock();
    }

    }
    }
    复制代码
  • 相关阅读:
    JVM探秘:jstack查看Java线程状态
    JVM探秘:MAT分析内存溢出
    JVM探秘:jmap生成内存堆转储快照
    JVM探秘:jstat查看JVM统计信息
    JVM探秘:jinfo查看JVM运行时参数
    JVM探秘:JVM的参数类型
    JVM探秘:内存分配与回收策略
    JVM探秘:GC日志收集与分析
    JVM探秘:垃圾收集器
    JVM探秘:垃圾收集算法
  • 原文地址:https://www.cnblogs.com/dayhand/p/2812069.html
Copyright © 2011-2022 走看看