zoukankan      html  css  js  c++  java
  • JUC 1

    1.并发与并行

    它们虽然都说是"多个进程同时运行",但是它们的"同时"不是一个概念。并行的"同时"是同一时刻可以多个进程在运行(处于running),并发的"同时"是经过上下文快速切换,使得看上去多个进程同时都在运行的现象,是一种OS欺骗用户的现象。并行与否程序员无法控制,只能让操作系统决定。

    2 .volatile 是Java虚拟机提供的轻量级的同比机制。 保证可见性,不保证原子性,禁止指令重排

    3 .JMM内存模型 是一种抽象概念本身并不存在,描述的是一组规则或规范,定义了程序中各个变量的访问方式 可见性 ,原子性,有序性

     

    4. Unsafe是CAS的核 务* .

    var1 对象 Var2 内存偏移量 va5 实际的值 var4要加的值

    synchronized加锁,一致性得到保障,并发性下降

    CAS 不加锁 听过多次比较 ,一致性,并发性都得到保障 *

    5. 原子引用

    5.1 时间戳原子引用解决ABA问题

    6. 集合不安全系列

    6.1 Arraylist / HashSet / HashMap ConcurrentModificationException 并发修改异常

    并发争抢修改导致,一个线程正在写入,另一个线程过来抢夺,导致数据不一致.

    HashSet 底层是HashMap value 是object类的常量

    List<String> list1=new Vector<>();            //解决方法
    List<String> list=Collections.synchronizedList(new ArrayList<>());
    Set hashSet=Collections.synchronizedSet(new HashSet<>());
    Set hashSet1=new CopyOnWriteArraySet();
    List<String> list2=new CopyOnWriteArrayList<>(); //写时复制
    public boolean add(E e) {                //CopyOnWriteArrayList的add方法
           final ReentrantLock lock = this.lock;  
           lock.lock();   //加锁
           try {
               Object[] elements = getArray(); //获取数组数据
               int len = elements.length;      //获取长度
               Object[] newElements = Arrays.copyOf(elements, len + 1);//创建新数组并长度加1,复制原有数据
               newElements[len] = e;//在最后边添加数据
               setArray(newElements);//重新放回资源类
               return true;//通知系统可以操作
          } finally {
               lock.unlock();//释放锁
          }

    7. JAVA 锁

    ReentrantLock(false/true) 是可公平锁, synchronized 是非公平锁. synchronized,ReentrantLock都是可重入锁.最大的做用是避免死锁.

    7.1 *CountDownLatch 倒数计数器 Enum的使用*

    7.2 CyclicBarrier 加法

    7.3 **Semaphore* 信号标* 一是用于多个资源的互斥作用,二是用于并发线程数的控制。

    8. *阻塞队列*

    题目:一个初始值为零的变量,两个线程对其交替进行加1减1的操作来5轮

    1.线程 操作(方法) 资源类

    2.判断 干活 通知

    3.防止虚假唤醒机制



  • 相关阅读:
    Atitit.安全性方案规划设计4gm  v1 q928
    Atitit ati licenseService    设计原理
    Atitit.js图表控件总结
    Atitit. null错误的设计 使用Optional来处理null
    System.Web.Mvc 命名空间
    provider: SQL Network Interfaces, error: 26 Error Locating Server/Instance Specified
    Visual Studio 2010 实用功能总结
    My First J2ME
    Java开发利器ideaIU最新版本10.5的keygen
    Happy New Year for 2012
  • 原文地址:https://www.cnblogs.com/luyuefei/p/12737205.html
Copyright © 2011-2022 走看看