您的位置:首页 > 编程语言

并发编程--线程局部变量的使用

2014-09-01 16:40 211 查看
如果创建的对象是实现了Runnable接口的类的实例,用它作为传入参数创建多个线程并启动这些线程,那么这些线程将共享相同的属性,也就是说,如果你在一个线程中改变了一个属性,所有的线程都会被这个改变影响。

在某种情况下,这个对象的属性不需要被所有的线程共享,java并发Api提供了一个干净的机制,即线程局部变量,具有很好的性能。

我们先来看看不安全的线程





从上面的代码可以看出创建的10个线程共享一个startDate属性,只要一个线程修改了这个属性,其他线程都是可见的,自然这是不安全,我们可以查看一下运行结果。





可以看到有两个线程的结束时间是同一个时间。

下面是一个安全的线程,使用线程局部变量





下面是运行结果





我们可以看到每个线程的完成时间都是唯一的,这些都是线程局部变量在起作用,当创建一个线程的时候,同时都会为每个线程创建一个属于该线程内部的startDate,所以这段程序是线程安全的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息