使用Concurrent集合

    BlockingQueue的意思就是说,当一个线程调用这个TaskQueuegetTask()方法时,该方法内部可能会让线程变成等待状态,直到队列条件满足不为空,线程被唤醒后,getTask()方法才会返回。

    因为非常有用,所以我们不必自己编写,可以直接使用Java标准库的java.util.concurrent包提供的线程安全的集合:ArrayBlockingQueue

    除了BlockingQueue外,针对ListMapSet、等,java.util.concurrent包也提供了对应的并发集合类。我们归纳一下:

    因为所有的同步和加锁的逻辑都在集合内部实现,对外部调用者来说,只需要正常按接口引用,其他代码和原来的非线程安全代码完全一样。即当我们需要多线程访问时,把:

    改为:

    就可以了。

    但是它实际上是用一个包装类包装了非线程安全的Map,然后对所有读写方法都用synchronized加锁,这样获得的线程安全集合的性能比java.util.concurrent集合要低很多,所以不推荐使用。

    使用包提供的线程安全的并发集合可以大大简化多线程编程:

    多线程同时读写并发集合是安全的;

    读后有收获可以支付宝请作者喝咖啡,读后有疑问请加微信群讨论

    使用Concurrent集合 - 图1