线程间的通信、同步方式与进程间通信方式

线程间的通信、同步方式与进程间通信方式

说到线程之间通信方式:依据我的理解 主要是有两种吧 
1.是通过共享变量,线程之间通过该变量进行协作通信; 
2.通过队列(本质上也是线程间共享同一块内存)来实现消费者和生产者的模式来进行通信;


1.通过线程之间共享变量的方式

    • 这个就有必要说下 wait(),notify(),以及notifyAll() 这三个方法

2.通过队列来实现线程的通信

    • 这里用的是java.util.concurrent包中linkedBlockingQueue 来进行线程间交互; 
      • java.util.concurrent.LinkedBlockingQueue 是一个基于单向链表的、范围任意的(其实是有界的)、FIFO 阻塞队列。访问与移除操作是在队头进行,添加操作是在队尾进行,并分别使用不同的锁进行保护,只有在可能涉及多个节点的操作才同时对两个锁进行加锁。

几种线程间通信的方式:

1:锁机制:互斥锁,条件变量,读写锁

1.1:互斥锁:提供了以排他方式阻止数据结构被并发修改的方法。

1.2:读写锁:允许多个线程同时读共享数据,而对写操作时互斥的。

1.3:条件变量:可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。

2:信号量机制:包括无名线程信号量和命名线程信号量。

3:信号机制:类似进程间的信号处理

线程间的通信的目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。

 
1、线程间的通信方式
  • 使用全局变量
    主要由于多个线程可能更改全局变量,因此全局变量最好声明为violate

2、线程间的同步方式

各个线程可以访问进程中的公共变量,资源,所以使用多线程的过程中需要注意的问题是如何防止两个或两个以上的线程同时访问同一个数据,以免破坏数据的完整性。数据之间的相互制约包括
1、直接制约关系,即一个线程的处理结果,为另一个线程的输入,因此线程之间直接制约着,这种关系可以称之为同步关系
2、间接制约关系,即两个线程需要访问同一资源,该资源在同一时刻只能被一个线程访问,这种关系称之为线程间对资源的互斥访问,某种意义上说互斥是一种制约关系更小的同步

线程间的同步方式有四种


3、进程间通信方式

进程间通信又称IPC(Inter-Process Communication),指多个进程之间相互通信,交换信息的方法。


4、好文推荐(reference)

原文地址:https://www.cnblogs.com/zedosu/p/6662076.html