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();
                }
            }
        }
    }
  • 相关阅读:
    DevExpress XtraReport报表预览时可编辑的功能
    vim编辑器的常用命令
    git 的一些常用命令
    ASP.NET MVC过滤器粗略总结
    违法占耕辅助处理软件
    三调管理信息系统
    java学习随笔源码day01
    Java学习笔记Day01-004之static关键字
    人事工资信息管理系统(核心代码实现、操作视频)
    人事工资信息管理系统之数据库设计
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/4568933.html
Copyright © 2011-2022 走看看