并发机制

并发机制
强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码

并发机制

并发与并行的区别

  • 并行是不同实体同时发生多个事件(往往是不同层面的)
  • 并发是一个实体同一时间间隔发生多个事件(比如轮询机制)

进程与线程的区别

  1. 进程可以理解软件的一次执行结果(进程是资源分配合拥有单位)
  2. 线程可以理解为进程的一个片段(处理器调度的基本单位)
  3. 同一进程中线程共享资源(相同的栈空间)
  4. 进程和线程都可以并发执行

同步与异步的区别

  • 同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求。(多用于共享资源)
  • 异步交互:指发送一个请求,不需要等待您返回,随时可以再发送下一个请求。

实现进程同步的方式
信号量 (Semaphore )、事件(Event)、互斥锁(Mutex)、临界区( Critical Section)
临界区只能实现同一进程中的线程同步,不能达到不同进程中的线程同步。

实现线程同步的方式

  1. 标记临界区
  2. 对变量使用volatile进行标记(提供了免锁机制 但不具备原子特性)
  3. 使用锁机制
  4. 使用局部变量实现线程同步 借助ThreadLocal类来管理变量
//只改Bank类,其余代码与上同
        public class Bank{
   
            //使用ThreadLocal类管理共享变量account
            private static ThreadLocal<Integer> account = new ThreadLocal<Integer>(){
   
                @Override
                protected Integer initialValue(){
   
                    return 100;
                }
            };
            public void save(int money){
   
                account.set(account.get()+money);
            }
            public int getAccount(){
   
                return account.get();
            }
        }
  • 5.使用阻塞队列实现线程同步
  • 6.使用原子变量实现线程同步
class Bank {
   
        private AtomicInteger account = new AtomicInteger(100);

        public AtomicInteger getAccount() {
   
            return account;
        }

        public void save(int money) {
   
            account.addAndGet(money);
        }
    }

Java提供的同步器
同步器:使线程能够等待另一线程对象。
如:CountDownLatch(倒计数器)、Semaphore(信号量)、CyclicBarrier(辅助类)、Exchager(交换者工具类)

产生死锁的必要条件

  • a.互斥条件:资源是独占的且排他使用
  • b.不可剥夺:在资源使用完之前,不能被其他进程强行剥夺
  • c.请求和保持:自己拥有的资源不释放,并且不断申请新的资源
  • d.循环等待条件:存在环路资源占用和申请

资源与进程的数量关系
资源数总数n 单个进程需要资源数m (默认资源不可同时访问 互斥) 进程数l
最多多少进程: n-m+1
最少多少资源: l*(m-1)+1

在这里插入图片描述

本文来源蹊源的奇思妙想,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/14712

发表评论