【青鸟飞扬教育】并发编程关键问题
2025-05-14
JDK ️天生就是多线程的,多线程大大提速了程序运行的速度,但是凡事有利就有弊,并发编程时经常会涉及到线程之间的通信跟同步问题,一般也说是可见性、原子性、有序性。
线程通信
线程的通信是指线程之间通过什么机制来交换信息,在编程中常用的通信机制有两个,️共享内存跟️消息传递。
共享内存。
在共享内存的并发模型中线程之间共享程序的公共数据状态,线程之前通过读写内存中的公共内存区域来进行信息的传递,典型的共享内存通信方式就是通过️共享对象来进行通信。
消息传递,比如在 Linux 系统中同步机制有管道、信号、消息队列、信号量、套接字这几种方式。
在消息传递的并发模型中,线程之间是没有共享状态的,线程之间必须通过明确的发送消息来显式的进行通信,在 Java 中的典型通信方式就是 wait() 跟 notify()。
在 C/C++ 中可以同时支持共享内存跟消息传递机制,Java 中采用的是共享内存模型。
线程同步
同步是指程序用于控制️不同线程之间操作发生相对顺序的机制。
在共享内存并发模型里,同步是显式进行的。程序员必须 ️显式指定某个方法或某段代码需要在线程之间互斥执行。
在消息传递的并发模型里,由于消息的发送必须在消息的接收之前,因此同步是隐式进行的。