首页 > 编程语言 >Java同步器简述

Java同步器简述

时间:2022-12-16 18:00:12浏览次数:68  
标签:Java 互斥 同步器 并发 简述 线程 进程 多线程

一、概述

在并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。主要原因是,对于多线程实现实现并发,一直以来,多线程都存在2个问题:

  • 线程之间内存共享,需要通过加锁进行控制,但是加锁会导致性能下降,同时复杂的加锁机制也会增加编程编码难度
  • 过多线程造成线程之间的上下文切换,导致效率低下

因此,在并发编程领域中,一直有一个很重要的设计原则:“不要通过内存共享来实现通信,而应该通过通信来实现内存共享。”

简单来说,就是尽可能通过消息通信,而不是内存共享来实现进程或者线程之间的同步。

  • 并发(Concurrent):在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。
  • 并行(Parallel):当系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行。
  • 信号量(Semaphore):是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用,也是作系统用来解决并发中的互斥和同步问题的一种方法。
  • 信号量机制(Semaphores):用来解决同步/互斥的问题的,它是1965年,荷兰学者Dijkstra提出了一种卓有成效的实现进程互斥与同步的方法。
  • 管程(Monitor):一般是指管理共享变量以及对共享变量的操作过程,让它们支持并发的一种机制。
  • 互斥(Mutual Exclusion):一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。即就是同一时刻只允许一个线程访问共享资源的问题。
  • 同步(Synchronization):两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。即就是线程之间如何通信、协作的问题。
  • 对象池(Object Pool):指的是一次性创建出N个对象,之后所有的线程重复利用这N个对象,当然对象在被释放前,也是不允许其他线程使用的,一般指保存实例对象的容器。

二、线程同步机制

2.1 多线程同步器

同步器 简述
volatile
synchronized

2.2 线程锁

同步器 简述
AQS 同步器基类
ReentrantLock
Condition 条件锁
ReentrantReadWriteLock 读写锁
StampedLock 邮戳锁

2.3 线程辅助类

辅助类 简述
Semaphore 信号灯
CountDownLatch 减计数器
CyclicBarrier 加法计数器
Exchanger 交换器
Phaser 阶段

标签:Java,互斥,同步器,并发,简述,线程,进程,多线程
From: https://www.cnblogs.com/ciel717/p/16840129.html

相关文章

  • JAVA结业测试题及答案
    JAVA结业试题二1下列哪些方法互为重载方法,哪些方法是覆盖方法。答案用号码标识:4分publicclassA{  ①publicstaticvoidmethod(Stringstr){};  ②protected int......
  • JAVA面试题-CORE JAVA部分
    JAVA面试题-COREJAVA部分                   --感谢SD0501班毕业学员李晓宾的提供,希望对面试学员和在校学员有所帮助。1. 在main(String[]args)方法内......
  • JavaScript中this关键字使用方法详解
       在面向对象编程语言中,对于this关键字我们是非常熟悉的。比如C++、C#和Java等都提供了这个关键字,虽然在开始学习的时候觉得比较难,但只要理解了,用起来是非常方便和意义......
  • java编码工具
    3.编码工具​工欲善其事,必先利其器。目前编码工具琳琅满目,大家可根据自己需求自己选择工具。3.1文本编辑器收费UltraEditEditPlus免费​subli......
  • Android Studio工程目录介绍,Ubuntu/Debian 系统切换Java(JVM),修改Java版本,JAVA_HOME
    AndroidStudio工程目录介绍 du1@dePc:~/asProjs/sms$./gradlewcleanERROR:JAVA_HOMEissettoaninvaliddirectory:/home/du1/aset/as/sdkPleasesettheJAVA......
  • Java-方法5-笔记
    1.作用:封装一段代码的语法结构,可以被重复调用,以此提高代码的复用性,提高开发效率,让程序逻辑更清晰2.方法的完整定义格式3.其他定义格式如果方法没有结果数据需要返回,返回值类......
  • Java-面向对象编程(oop)6-笔记
    1.面向对象的思想面向:拿或者找对象:东西面向对象编程:拿或者找东西过来编程解决问题面向对象:把现实世界中的事物全部看成一个一个的对象来解决问题的。(万物皆对象)面向对象编程......
  • 东拼西凑学java
    前言随着大环境的影响,互联网寒冬降临,程序员的日子越来越难,搞不好哪天就被噶了,多学点东西也没啥坏处,国内市场java如日中天,出门在外不会写两行java代码,都不好意思说......
  • Java内省
    IntrospectorJavaJDKIntrospector在开发框架的时候经常会用到Java类的get/set方法设置或者获取值,但是每次都是用反射来完成此类操作或与麻烦,JDK提供了一套API,专门操......
  • java相关学习资料收集
    springboot学习资料springboot系列教程 spingboot系列教程2 javaspringboot学习application.properties全部配置项   ​​点击查看SpringBoot所有配置......