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();
                }
            }
        }
    }
  • 相关阅读:
    可变长参数列表
    《Android深入透析》之广播(Broadcast)
    android设计模式资源集合
    Android内存性能优化
    Java 对象的生命周期
    Android 打印java堆栈的几种方法
    Android下打印调试堆栈方法
    UML类图几种关系的总结
    【转】Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
    查看Android设备的CPU架构信息
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/4568933.html
Copyright © 2011-2022 走看看