zoukankan      html  css  js  c++  java
  • java 多线程(ReadWriteLock)

    package com.example;
    
    public class App {
    
        public static void main(String[] args) {
            Info info = new Info();
            ReadInfo ri = new ReadInfo(info);
            WriteInfo wi = new WriteInfo(info);
            
            Thread t1 = new Thread(ri,"ri1");
            Thread t2 = new Thread(ri,"ri2");
            Thread t3 = new Thread(ri,"ri3");
            Thread t4 = new Thread(wi,"wi1");
            Thread t5 = new Thread(wi,"wi2");
            
            t1.start();
            t2.start();
            t3.start();
            t4.start();
            t5.start();    
        }
    }
    package com.example;
    
    import java.util.concurrent.locks.ReadWriteLock;
    import java.util.concurrent.locks.ReentrantReadWriteLock;
    
    public class Info {
        private int num;
        //ReadWriteLock 可以理解为对synchronized更加精细化的管理
        private ReadWriteLock lock;
        
        public Info(){
            this.num = 0;
            lock = new ReentrantReadWriteLock();
        }
        
        public int getNum(){
            lock.writeLock().lock();
            int output = this.num;
            lock.writeLock().unlock();
            return output;
        }
        
        public void setNum(int input){
            lock.readLock().lock();
            this.num = input;
            lock.readLock().unlock();
        }    
    }
    package com.example;
    
    public class ReadInfo implements Runnable {
        
        private Info info;
        
        public ReadInfo(Info in){
            this.info = in;
        }
        
        @Override
        public void run() {
            for(int i = 0; i < 10; i++){
                System.out.println(Thread.currentThread().getName() + "   " + info.getNum());
                try {
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    package com.example;
    
    public class WriteInfo implements Runnable {
        
        private Info info;
        
        public WriteInfo(Info in){
            this.info = in;
        }
        
        @Override
        public void run() {
            for(int i = 0; i < 10; i++){
                info.setNum(i + info.getNum());
                System.out.println(Thread.currentThread().getName() + "  setInfo:  " + info.getNum());
                try {
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
  • 相关阅读:
    coding
    我的大学
    《活出生命的意义》读后感
    《世界是数字的》读后感
    学习进度表
    阅读《我是一只IT小小鸟有感》
    《软件工程师职业规范》心得
    软件工程第二次结对作业
    软件工程第三次作业
    软件工程第二次作业
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/4568933.html
Copyright © 2011-2022 走看看