zoukankan      html  css  js  c++  java
  • JUC学习(三)

    CopyOnWriteArrayList

    set

     Callable

    常用的辅助类:必会

    CountDownLatch   :减法计数器

    CyclicBarrier:   加法计数器

     Semaphore 信号量

    读写锁

    import java.util.HashMap;
    import java.util.Map;
    import java.util.concurrent.locks.ReadWriteLock;
    import java.util.concurrent.locks.ReentrantReadWriteLock;
    
    /**
     * @author : lijie
     * @Description: 独占锁(写锁):一次只能被一个线程锁拥有 共享锁(读锁):多个线程可以同时拥有 读--读     可以共存 读--写   不可以共存 写--写    不可以共存
     * @date Date : 2021年08月22日 20:43
     */
    
    public class ReadWriteLockDemo {
    
      public static void main(String[] args) {
        final MyCache cache = new MyCache();
        // 写入
        for (int i = 1; i <= 5; i++) {
          int tmp = i;
          new Thread(() -> cache.put(tmp + "", tmp + ""), String.valueOf(i)).start();
        }
    
        // 读取
        for (int i = 1; i <= 5; i++) {
          int tmp = i;
          new Thread(() -> cache.get(tmp + ""), String.valueOf(i)).start();
        }
      }
    
    }
    
    class MyCache {
    
      private volatile Map<String, String> map = new HashMap<>();
      // 读写锁,更加细粒度的控制
      private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
    
      public void put(String key, String val) {
        readWriteLock.writeLock().lock();
        try {
          System.out.println(Thread.currentThread().getName() + "写入" + key);
          map.put(key, val);
          System.out.println(Thread.currentThread().getName() + "写入结束");
        } catch (Exception e) {
          e.printStackTrace();
        } finally {
          readWriteLock.writeLock().unlock();
        }
      }
    
      // 读取,所有人都可以读
      public void get(String key) {
        readWriteLock.readLock().lock();
        try {
          System.out.println(Thread.currentThread().getName() + "读取" + key);
          final String s = map.get(key);
          System.out.println(Thread.currentThread().getName() + "读取结束");
        } catch (Exception e) {
          e.printStackTrace();
        } finally {
          readWriteLock.readLock().unlock();
        }
    
      }
    }

     

    获取IO的常用大型任务的个数,然后乘以2即可

  • 相关阅读:
    IPSec (一)
    python 面向过程和面向对象
    一键修改 yum 源为 aliyun 阿里源 Shell 脚本
    第11组Alpha冲刺(6/6)
    第11组Alpha冲刺(5/6)
    第11组 Alpha冲刺(4/6)
    第11组Alpha冲刺(3/6)
    第11组 Alpha冲刺 (2/6)
    第11组 Alpha冲刺 (1/6)
    第11组(73)需求分析报告
  • 原文地址:https://www.cnblogs.com/codehero/p/15172411.html
Copyright © 2011-2022 走看看