Java同步器简述
一、概述
在并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。主要原因是,对于多线程实现实现并发,一直以来,多线程都存在2个问题:
线程之间内存共享,需要通过加锁进行控制,但是加锁会导致性能下降,同时复杂的加锁机制也会增加编程编码难度
过多线程造成线程之间的上下文切换,导致效率低下
因此,在并发编程领域中,一直有一个很重要的设计原则:“不要通过内存共享来实现通信,而应该通过通信来实现内存共享。”
简单来说,就是尽可能通过消息通信,而不是内存共享来实现进程或者线程之间的同步。
并发():在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。
并行():当系统有一个以上时,当一个执行一个进程时,另一个可以执行另一个进程,两个进程互不抢占资源,可以同时进行。
信号量():是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用,也是作系统用来解决并发中的互斥和同步问题的一种方法。
信号量机制():用来解决同步/互斥的问题的,它是1965年,荷兰学者Dijkstra提出了一种卓有成效的实现进程互斥与同步的方法。
管程():一般是指管理共享变量以及对共享变量的操作过程,让它们支持并发的一种机制。
互斥():一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。即就是同一时刻只允许一个线程访问共享资源的问题。
同步():两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。即就是线程之间如何通信、协作的问题。
对象池():指的是一次性创建出个对象,之后所有的线程重复利用这个对象,当然对象在被释放前,也是不允许其他线程使用的,一般指保存实例对象的容器。
二、线程同步机制
2.1 多线程同步器
同步器
简述
volatile
synchronized
2.2 线程阻塞工具类
同步器
简述
LockSupport
中控制线程的实现类,是并发基础组件中的基础组件。
2.3 线程锁
同步器
简述
AQS
同步器基类
ReentrantLock
锁
Condition
条件锁
ReentrantReadWriteLock
读写锁
StampedLock
邮戳锁
三、线程辅助类
辅助类
简述
Semaphore
信号灯
CountDownLatch
减计数器
CyclicBarrier
加法计数器
Exchanger
交换器
Phaser
阶段
四、总结
三种等待唤醒机制:
搭配的、
的和方法
的和
类和提供的阻塞唤醒机制十分相似,体现在:
要求阻塞和唤醒是有序的:它们都只能先阻塞再唤醒。否则会抛异常,且被阻塞的线程不能被唤醒。
依赖加锁或同步代码块:调用的等待唤醒方法时要搭配一起用。即的和要写在同步代码块内;调用的和方法时要搭配,一起用。否则也会抛异常,且被阻塞的线程不能被唤醒。
类与前两者不同:
类支持先唤醒后阻塞,不会抛异常(底层是通过通行证实现的)。
类不依赖加锁代码块,直接,调用即可,较方便。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/93109.html