Java线程安全——学习笔记(一)
2013-07-05 00:00
225 查看
一个对象的状态就是它的数据,存储在状态变量(state variables)中,比如实例域或静态域。对象的状态还包括了其他附属对象的域。例如,HashMap的状态一部分存储到对象本身中,但同时也存储到很多Map.Entry对象中。一个对象的状态包括了任何对它外部可见行为产生影响的数据。
所谓共享,是指一个变量可以被多个线程访问;所谓可变,是变量的值在其生命周期内可以改变。一个对象是否应该线程安全的取决于它是否会被多个线程访问。线程安全的这个性质,取决于程序中如何使用对象,而不是对象完成了什么。保证对象的线程安全性需要使用同步来协调对其可变状态的访问;若是做不到这一点,就会导致脏数据和其他不可预期的厚国。
无论何时,只要有多于一个的线程访问给定的状态变量,而且其中某个线程会写入该变量,此时必须使用同步来协调线程对该变量的访问。Java中首要的同步机制是synchronized关键字,它提供了独占锁。除此之外,术语“同步”还包括volatile变量,显示锁和原子变量的使用。
总结:
所谓共享,是指一个变量可以被多个线程访问;所谓可变,是变量的值在其生命周期内可以改变。一个对象是否应该线程安全的取决于它是否会被多个线程访问。线程安全的这个性质,取决于程序中如何使用对象,而不是对象完成了什么。保证对象的线程安全性需要使用同步来协调对其可变状态的访问;若是做不到这一点,就会导致脏数据和其他不可预期的厚国。
无论何时,只要有多于一个的线程访问给定的状态变量,而且其中某个线程会写入该变量,此时必须使用同步来协调线程对该变量的访问。Java中首要的同步机制是synchronized关键字,它提供了独占锁。除此之外,术语“同步”还包括volatile变量,显示锁和原子变量的使用。
总结:
在没有正确同步的情况下,如果多个线程访问了同一个变量,你的程序就存在隐患,有3种方法修复它: 1. 不要跨线程共享变量 2. 使状态变量为不可变的;或者 3. 在任何访问状态变量的时候使用同步 |
相关文章推荐
- Java并发编程(Java Concurrency)(9)- 线程安全与共享资源(Thread Safety and Shared Resources)
- java线程安全问题之静态成员变量、实例成员变量、局部变量
- Java线程安全的计数器
- java再复习——线程的安全问题以及同步
- Java线程安全-同步方式
- Java线程一:完全与不安全
- Java -- 线程的安全
- java线程安全总结
- Java HashMap笔记之二:线程不安全原理
- Java的多线程之线程安全的集合
- Java并发(1) i++的线程安全问题
- Java多线程总结之线程安全队列Queue
- [转]Java 关闭线程的安全方法
- JAVA 并发编程随笔【七】线程安全与共享资源
- java线程安全总结(二)
- Java多线程总结之线程安全队列Queue
- Java 并发之线程安全
- java线程安全总结
- java 多线程学习之多生产者多消费者产生的线程安全问题分析与解决:Lock和Condition
- Java线程安全详细总结