Java中线程间有哪些通信方式?_通知机制

1、volatile和synchronized关键字

关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对改变量的访问均需要从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问的可见性。

关键字synchronized可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一个时刻,只能有一个线程处于方法后者同步块中,它保证了线程对变量访问的可见性和排他性。

2、等待/通知机制

可以通过Java内置的等待/通知机制(wait()/notify())实现一个线程修改一个对象的值,而另一个线程感知到了变化,然后进行相应的操作。

3、管道输入/输出流

管道输入/输出流和普通的文件输入/输出流或者网络输入/输出流不同之处在于,它主要用于线程之间的数据传输,而传输的媒介为内存。

管道输入/输出流主要包括如下4中具体实现:PipedOutputStream、PipedInputStream、 PipedReader和PipedWriter,前两种面向字节,而后两种面向字符。

4、使用Thread.join()

如果一个线程A执行了Thread.join()语句,其含义是:当前线程A等待thread线程终止之后采用thread.join()返回。

Thread除了提供join()之外还提供了join(long millis)和join(long millis,int nanos)两个具备超时特性的方法。

5、使用TheadLocal

ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值得存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上得一个值。

可以通过set()方法来设置值,在当前线程下再通过get方法来获取原先设置得值。