java 线程安全是什么?说说概念就行了
2个回答
展开全部
线程安全是指要控制多个线程对某个资源的有序访问或修改,而在这些线程之间没有产生冲突。
在Java里,线程安全一般体现在两个方面:
1、多个thread对同一个java实例的访问(read和modify)不会相互干扰,它主要体现在关键字synchronized。如ArrayList和Vector,HashMap和Hashtable(后者每个方法前都有synchronized关键字)。如果你在interator一个List对象时,其它线程remove一个element,问题就出现了。
2、每个线程都有自己的字段,而不会在多个线程之间共享。它主要体现在java.lang.ThreadLocal类,而没有Java关键字支持,如像static、transient那样。
在Java里,线程安全一般体现在两个方面:
1、多个thread对同一个java实例的访问(read和modify)不会相互干扰,它主要体现在关键字synchronized。如ArrayList和Vector,HashMap和Hashtable(后者每个方法前都有synchronized关键字)。如果你在interator一个List对象时,其它线程remove一个element,问题就出现了。
2、每个线程都有自己的字段,而不会在多个线程之间共享。它主要体现在java.lang.ThreadLocal类,而没有Java关键字支持,如像static、transient那样。
展开全部
一个是要防止死锁。和死循环是不同的概念的。
另一个是当多线程 同时需要访问共享数据的时候,容易出现不安全问题。
如: 写一个实现线接口程类,定义一个变量赋值为0,将它自增,然后打印。
新建两个线程 同时运行时候,可能会 不是 1234567,可能会是 1334667。 因为当第一个线程赋值了但还没有来得及打印就被第二个线程抢占了执行权,当第二个线程执行完,第一线程在运行打印的时候就自增了2了。
另一个是当多线程 同时需要访问共享数据的时候,容易出现不安全问题。
如: 写一个实现线接口程类,定义一个变量赋值为0,将它自增,然后打印。
新建两个线程 同时运行时候,可能会 不是 1234567,可能会是 1334667。 因为当第一个线程赋值了但还没有来得及打印就被第二个线程抢占了执行权,当第二个线程执行完,第一线程在运行打印的时候就自增了2了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |