1 什么是线程通信?
多个线程在处理同一个资源, 并且任务不同时, 需要线程通信来帮助解决线程之间对同一个变量的使用或操作. 就是多个线程在操作同一份数据时, 避免对同一共享变量的争夺.
2 为什么要线程通信?
(1) 多个线程并发执行时, 在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成一件任务,并且我们希望他们有规律的执行, 那么多线程之间需要一些协调通信,以此来帮我们达到多线程共同操作一份数据。
(2) 当然如果我们没有使用线程通信来使用多线程共同操作同一份数据的话,虽然可以实现, 但是在很大程度会造成多线程之间对同一共享变量的争夺,那样的话势必为造成很多错误和损失!
(3) 所以, 我们才引出了线程之间的通信, 多线程之间的通信 能够避免对同一共享变量 的争夺.
3 线程间的通信方式.
(1) 同步.
这里讲的同步是指多个线程通过 synchronized 关键字这种方式来实现线程间的通信.
(2) while轮询的方式.
这种方式会 浪费CPU资源. 就类似于现实生活中, 某个人一直看着手机屏幕是否有电话来了. 而不是在干别的事情,当有电话来时,响铃通知TA电话来了.
(3) wait /notify 机制.
好处就是CPU的利用率提高了. 坏处是如果通知过早, 会打乱程序的执行逻辑.
进程间通信方式.
1 管道: 速度慢, 容量有限, 只有 父子之间的进程能通信.
2 FIFO: 一种 命名管道, 任何进程之间都能通信, 但是速度慢.
3 消息队列: 容量受到系统限制.
4 信号量: 不能传递复杂消息, 只能用来同步.
5 共享内存: 速度快, 但要保持同步.
6 套接字: 可用于 不同机器之间的额通信.