Java线程之间通信方式

通信方式:
    1.同步
        a.同步是指多个线程之间通过synchronize关键字这种方式来实现线程间的通讯。
        b.这种方式本质上就是共享内存式的通讯。多个线程需要访问同一个共享变量,谁拿到了锁(获得了访问权限),谁就可以执行。
    2.while轮询的方式
        a.这种方式比较浪费资源,是因为JVM將调度器交给轮询线程执行时,它只是在不断地测试某个条件是否成立。
        b.线程都是先把变量读取到本地线程栈空间,然后再去修改本地变量。另一线程每次都在取本地的条件变量,可能造成死循环。
    3.wait/notify机制
        a.调用wait()放弃CPU,并进入阻塞状态。调用notify(),唤醒其他线程。
        b.这种方式的好处是CPU的利用率提高了。
    4.管道通讯
        使用java.io.PipedInputStream 和 java.io.PipedOutputStream进行通信。

分布式系统中说的两种通信机制:共享内存机制和消息通信机制。前面的synchronized关键字和while轮询 “属于” 共享内存机制,
由于是轮询的条件使用了volatile关键字修饰时,这就表示它们通过判断这个“共享的条件变量“是否改变了,来实现进程间的交流。

而管道通信,更像消息传递机制,也就是说:通过管道,将一个线程中的消息发送给另一个。
    

发布了90 篇原创文章 · 获赞 92 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/LMAKE_nbsp/article/details/103779389