说一个类是线程安全的,怎么理解?比如:链表阻塞队列LinkedBlockingQueue

首先什么是多线程?  (多线程并不是一定会存在数据安全问题。)

线程是进程中的概念,可以理解为一个进程中,多个程序代码同时运行(其实不是同时运行,是cpu轮流执行这些程序,只不过cpu速度非常快,给人的感觉是同时运行而已)。

这些程序如果是不同的代码,就不会存在数据安全问题。如果是同一段代码,就会有数据安全问题。

用形象的比喻来理解线程:

线程可以理解为路径,进程中都会有一条main路径。多线程就是开辟了多条路径,多条路径如果各自跑不同的代码,就不存在数据安全问题。  

如果多条路径跑同一段代码,就可能发生数据不安全的情况(如:同一个数据被多个线程同时拿到。。。好吧,大概就这一种情况)。

如何确保数据安全?就是让线程排队进入这段代码。两种方式:1、synchronized  2、lock给这段代码加锁。

说这个类是安全的,就是说多线程环境下,跑了这个类中的同一段代码,这段代码加了同步或者锁,从而确保了线程安全。

LinkedBlockingQueue中维持两把锁,一把锁用于入队,一把锁用于出队,这也就意味着,同一时刻,只能有一个线程执行入队,其余执行入队的线程将会被阻塞;同时,可以有另一个线程执行出队,其余执行出队的线程将会被阻塞。换句话说,虽然入队和出队两个操作同时均只能有一个线程操作,但是可以一个入队线程和一个出队线程共同执行,也就意味着可能同时有两个线程在操作队列,那么为了维持线程安全,LinkedBlockingQueue使用一个AtomicInterger类型的变量表示当前队列中含有的元素个数,所以可以确保两个线程之间操作底层队列是线程安全的,这个在后面源码分析的时候会说明。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容