并发编程--线程局部变量的使用
2014-09-01 16:40
211 查看
如果创建的对象是实现了Runnable接口的类的实例,用它作为传入参数创建多个线程并启动这些线程,那么这些线程将共享相同的属性,也就是说,如果你在一个线程中改变了一个属性,所有的线程都会被这个改变影响。
在某种情况下,这个对象的属性不需要被所有的线程共享,java并发Api提供了一个干净的机制,即线程局部变量,具有很好的性能。
我们先来看看不安全的线程
从上面的代码可以看出创建的10个线程共享一个startDate属性,只要一个线程修改了这个属性,其他线程都是可见的,自然这是不安全,我们可以查看一下运行结果。
可以看到有两个线程的结束时间是同一个时间。
下面是一个安全的线程,使用线程局部变量
下面是运行结果
我们可以看到每个线程的完成时间都是唯一的,这些都是线程局部变量在起作用,当创建一个线程的时候,同时都会为每个线程创建一个属于该线程内部的startDate,所以这段程序是线程安全的。
在某种情况下,这个对象的属性不需要被所有的线程共享,java并发Api提供了一个干净的机制,即线程局部变量,具有很好的性能。
我们先来看看不安全的线程
从上面的代码可以看出创建的10个线程共享一个startDate属性,只要一个线程修改了这个属性,其他线程都是可见的,自然这是不安全,我们可以查看一下运行结果。
可以看到有两个线程的结束时间是同一个时间。
下面是一个安全的线程,使用线程局部变量
下面是运行结果
我们可以看到每个线程的完成时间都是唯一的,这些都是线程局部变量在起作用,当创建一个线程的时候,同时都会为每个线程创建一个属于该线程内部的startDate,所以这段程序是线程安全的。
相关文章推荐
- C#多线程编程之:使用Semaphore类限制资源并发访问数
- 并发编程【正确使用 Volatile 变量】
- 并发编程(一): POSIX 使用互斥量和条件变量实现生产者/消费者问题
- 使用 Boost 的 IPC 和 MPI 库进行并发编程
- 使用 Boost 的 IPC 和 MPI 库进行并发编程
- 并发编程之使用信号量来限制工作队列的容量
- 并发编程--在同步代码中使用条件实现生产者消费者
- linux网络编程之socket(四):使用fork并发处理多个client的请求和对等通信p2p
- 使用 Boost 的 IPC 和 MPI 库进行并发编程
- Java并发编程:Thread类的使用
- 使用 Boost 的 IPC 和 MPI 库进行并发编程
- 使用 Boost 的 IPC 和 MPI 库进行并发编程
- 使用 Boost 的 IPC 和 MPI 库进行并发编程
- 并发编程(一): POSIX 使用互斥量和条件变量实现生产者/消费者问题
- 【Java并发编程】之七:使用synchronized获取互斥锁的几点说明
- 并发编程【正确使用 Volatile 变量】
- 使用 Boost 的 IPC 和 MPI 库进行并发编程
- linux网络编程之socket:使用fork并发处理多个client的请求
- 【Java并发编程】之八:多线程环境中安全使用集合API(含代码)
- 并发编程--使用synchronized实现同步方法