![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 75
汐梦聆海
過去を捨てなくては 未来の場所がない
展开
-
进程之间的通信方式
(1)管道: 在Linux基本命令的使用中,通常使用多个命令的组合来达到我们的需求。例如我们想查看一下正在运行中的python进程: ps -aux | grep python 这里的“|”实际上就是管道的意思。“|”前面部分作为“|”后面部分的输入,但这很明显是单向传输的管道,被称为“匿名管道”。如果想实现双向传输,可以考虑使用两个管道进行拼接。 管道的问题就是通信效率非常低下。假设有A和B两个进程,A进程将数据写入管道,B进程必须等待A进程将信息写完以后才能读出来,所以不适合非常频繁的通信。 (2)消原创 2021-12-10 13:55:16 · 284 阅读 · 0 评论 -
通讯工具类 CountDownLatch CyclicBarrier Semaphore
CountDownLatch CountDownLatch可以看作是一个减法计数器。CountDown代表计数递减,Latch是“门闩”的意思。也有人把它称为“屏障”。假设某个线程在执行任务之前,需要等待其它线程完成一些前置任务,必须等所有的前置任务都完成,才能开始执行本线程的任务。 看下面一段代码 public class CountTest { public static void main(String[] args) throws InterruptedException {原创 2021-12-07 19:11:15 · 287 阅读 · 0 评论 -
聊一聊synchronize关键字
Java并发编程中,锁是一个绕不开的话题。锁都是基于对象的,Java中每一个对象都可以作为一个锁。值得注意的是,我们所说的类锁也是基于对象的,因为一个类唯一对应着一个Class对象。 Synchronize关键字 锁通常与 synchronize 关键字联系到一起,synchronize有三种使用方法:分别是(1)作用在实例方法上,锁为当前实例;(2)作用在静态方法上,锁为当前Class对象;(3)作用在代码块上,锁为括号里的对象。 // 关键字在实例方法上,锁为当前实例 public synchroniz原创 2021-12-06 19:08:17 · 681 阅读 · 1 评论 -
volatile关键字的作用
在说volatile关键字之前,首先要了解一下java内存模型JMM。 JMM(Java Memory Model) JMM目的是为了屏蔽各种硬件和操作系统之间的内存访问差异,从而让JAVA程序在各种平台对内存的访问一致。 JMM规定了所有的变量都存储在主存中,每个线程都有自己独立的工作空间,线程对变量的操作必须先从主存中读取到自己的工作内存中然后再进行操作,最后回写回主存。(值得注意的是,每一个线程对应由一个CPU来执行,CPU和主存之间的速度是有差异的,因此每个线程的工作内存有点相当于缓存cache的功原创 2021-12-03 15:45:15 · 459 阅读 · 1 评论 -
synchronized和Lock实现生产者消费者
synchronized实现生产者消费者: public class ProducerConsumer2 { public static void main(String[] args) { Data2 data = new Data2(); new Thread(()->{ for(int i = 0; i < 20; i++) { try { data.原创 2021-11-08 16:19:51 · 202 阅读 · 0 评论