|
|
51CTO旗下网站
|
|
移动端

1.6.2 线程同步

《Java多线程与Socket:实战微服务框架》第1章多线程基础,本书尽量采用简要和通俗易懂的方式来介绍多线程知识。本节为大家介绍线程同步。

作者:庞永华来源:电子工业出版社|2019-03-26 15:51

【大咖·来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》

1.6.2 线程同步

所谓线程同步指的是线程之间的协调和配合,是多线程环境下解决线程安全与效率问题的关键。线程同步的方式和机制有临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)4种方式。

(1)临界区:在同一时刻只允许一个线程“执行”的代码块被称为临界区。临界区通常用锁机制来实现。

(2)互斥量:互斥量是一个对象,只有拥有互斥对象的线程才被允许访问共享资源。由于互斥对象只有一个,因此能保证共享资源不会同时被多个线程访问。

(3)信号量:信号量允许有限数量的线程在同一时刻访问同一资源。当访问这一资源的线程数达到信号量所设置的上限时,其他试图访问些资源的线程将被阻塞。

(4)事件:通过发送“通知”的形式来实现线程的同步。

相对应的是,Java中常见的线程同步手段如下。

(1)volatile关键字:用于解决线程间内存的可见性问题。

(2)synchronized关键字:在语法层面提供的一种基于对象监视器的同步锁。

(3)wait()/notify()/notifyAll()方法:基于synchronized提供的对象同步锁实现线程同步。

(4)CAS操作:基于CPU的CAS指令实现的无阻塞原子操作。

(5)atomic包:基于CAS和volatile实现的原子操作实现类。

(6)Lock自旋锁:基于CAS操作实现的一种无阻塞乐观锁。

(7)Condition条件变量:提供基于Lock锁的条件控制,其await()/signal()/signalAll()方法用于实现类似wait()/notify()/notifyAll()的同步机制。

(8)线程安全类:提供各种线程安全的容器或工具对象。

(9)ThreadLocal类:每个线程提供临时持有和传递对象的方法。

(10)CountDownLatch计数器:实现倒计数功能。

(11)CyclicBarrier栅栏:用于协调线程的步调,确保它们保持一致。

(12)Semaphore信号量:用于限制访问某个资源的线程数。

(13)fork/join框架:一种支持任务拆分、多任务并行处理与结果合并的框架。

我们将在后面的章节中逐一介绍这些内容。


喜欢的朋友可以加入官方的读书群

51CTO读书频道二维码


51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

Jenkins Pipeline可持续化集成

Jenkins Pipeline可持续化集成

优化运维流水线
共3章 | youerning

198人订阅学习

笑熬浆糊之职场那些事

笑熬浆糊之职场那些事

IT人的职场心法
共22章 | Bear_Boss

79人订阅学习

Redis运维秘籍

Redis运维秘籍

运维标配技术
共15章 | one叶孤舟

199人订阅学习

读 书 +更多

网络工程师教程(第2版)

本书是全国计算机技术与软件专业技术资格(水平)考试的指定用书。按照新的网络工程师考试大纲的规定,本书包含了数据通信基础知识、网络体...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客