线程安全与非线程安全的区别

来源:互联网 发布:java编写九九乘法表 编辑:程序博客网 时间:2024/05/16 23:58

话不多说,直接上例子,用例子说明一切。

ArrayList是非线程安全,Vector是线程安全的

线程A,B同时访问ArrayList C(非线程安全
他们都读出C的第一个元素是100(假设该元素是表示书库的库存),这时候A线程因为其他原因挂起了,而B还在执行
那么B线程显示还有100个书本库存,B根据他卖出的货量修改元素为:100-20=80.
这时候A线程回来了,他也开始继续执行,他开始修改,结果他修改为100-10=90
这时候就出现问题了,实际只有70本,显示的却是90

而vector不会,A访问的时候显示100,B再来访问就不能访问,当A修改完毕后,B才能访问,显示为80,这样就不会出现问题

总结下:同一个非线程安全(例如:ArrayList)可以被多个用户(线程)同时访问
而同一个线程安全(例如:vector),A线程在访问的时候,B线程不能访问而挂起,等A释放对vector的锁以后B再访问。

原创粉丝点击