线程间通信(同步)

线程间通信(同步)

在面试中遇到一个问题,问线程间是怎么通信的,一时间有点懵,这个问题面试官想要问的是啥呢,结束面试查阅资料后,才理解这个问题考察的是线程间等待唤醒机制等,就是线程间同步,ORZ!一个送分题,因为没理解想问什么知识题白给了。

线程间通信(同步)的4种方式

  1. volatile关键字
    对变量使用此关键字修饰后,一个线程对此变量的修改,其他线程是立马可见的,即所有volatile修饰的变量一旦被某个线程更改,必须立即刷新到主内存,同时所有volatile修饰的变量在使用之前必须重新读取主内存的值,此为可见性,保证了线程间的通信。

  2. 等待/通知机制
    即wait/notify、notifyAll,线程调用wait方法后即会将自己置于等待状态,直至被其他线程唤醒,notify和notifyAll方法会将线程唤醒,执行后续操作,notify唤醒随机一个线程,notifyAll唤醒全部线程。

  3. join方式
    join可以保证线程的顺序执行,对其理解是join相当于一个容器,一个线程执行join方法后,其他线程会暂停等待,直到执行join方法的线程执行完毕。

  4. ThreadLocal(可以解决全局通用变量线程不安全的问题)
    :ThreadLocal中有一个ThreadLocalMap内部类,ThreadLocalMap可以维护线程内部变量,是key-value形式,key为当前ThreadLocal,value就是变量的副本。因此,这样对于SimpleDateFomat此类线程不安全的类,同时又是一个全局通用的变量来说,可以使用ThreadLocal管理和维护一份即可。建议使用InheritableThreadLocal,此类继承自ThreadLocal,不仅仅本线程可以获取存的值,它的子线程也可以。

  5. 阻塞队列LinkedBlockingQueue

  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信