2 u011359326 u011359326 于 2016.01.17 12:25 提问

如何理解java中的某些方法不是线程安全的(不能同步访问)。

如何理解java中的某些方法不是线程安全的(不能同步访问)。
能同步访问的方法有哪些,如何判断一个方法能不能同步访问

3个回答

caozhy
caozhy   Ds   Rxr 2016.01.17 18:25
已采纳

不是线程安全的(不能同步访问)
你说反了。不是线程安全的才需要同步访问。同步访问的意思就是串行执行,等前面执行完了,再执行后面的。
线程不安全的场合很多,比如像操作系统中的用户界面、打印机等外设、控制台输出,都不允许并发(设想两个程序同时要输出文字到同一个屏幕,那还不乱套了)
在代码中,每个线程有自己的堆栈但是共享整个堆,所以访问那些全局的变量,也必须同步,否则会出现脏读数据。
同步也不是万能的良药。不当的锁定会导致程序死锁,而且多线程本身就是为了提高性能,但是同步使用多了,程序又实质上退化成了单线程程序,用多线程的意义也就没了。

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.01.17 14:29
 线程不安全的方法的特点有:
1,访问了共享变量如对象的成员变量,静态变量等;
2,共享变量的访问操作没有作同步即没有锁同步;
3,涉及到共享变量的原子操作的代码块没有同步处理,如count++这个操作对应三个步骤,如果中三个步骤分散在多个线程中同时执行了,那么最终结果就不合常理了。
91program
91program   Ds   Rxr 2016.01.17 13:01
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!