java多线程中线程安全和非线程安全
2018-01-06 16:34
190 查看
线程安全是指多个线程操作同一个对象,不会产生不一致的结果,非线程安全就可能出现每次的执行结果都不一致。
线程安全方式:
1.使用volatile关键字修饰的变量多所有线程可见,当一个线程修改了变量的值,新的值会立即从当前线程工作空间同步到主内存当中,而其他线程读取这个变量的时候,也会从主内存中拉取最新的变量值,但如果对该变量的操作含有原子操作时,不能保证线程安全。
2.使用很多synchronized关键字来同步控制,所以必然会导致性能的降低。
注意非线程安全不是说不安全,有人在使用过程中有一个不正确的观点:我的程序是多线程的,不能使用ArrayList要使用Vector,这样才安全。非线程安全并不是多线程环境下就不能使用。注意我上面有说到:多线程操作同一个对象。注意是同一个对象。如果是在主线程中new的一个ArrayList然后多个线程操作同一个ArrayList对象,那就时非线程安全,如果是每个线程中new一个ArrayList,而这个ArrayList只在这一个线程中使用,那么肯定是没问题的。
示例代码参考:http://blog.csdn.net/xiao__gui/article/details/8934832
线程安全方式:
1.使用volatile关键字修饰的变量多所有线程可见,当一个线程修改了变量的值,新的值会立即从当前线程工作空间同步到主内存当中,而其他线程读取这个变量的时候,也会从主内存中拉取最新的变量值,但如果对该变量的操作含有原子操作时,不能保证线程安全。
2.使用很多synchronized关键字来同步控制,所以必然会导致性能的降低。
注意非线程安全不是说不安全,有人在使用过程中有一个不正确的观点:我的程序是多线程的,不能使用ArrayList要使用Vector,这样才安全。非线程安全并不是多线程环境下就不能使用。注意我上面有说到:多线程操作同一个对象。注意是同一个对象。如果是在主线程中new的一个ArrayList然后多个线程操作同一个ArrayList对象,那就时非线程安全,如果是每个线程中new一个ArrayList,而这个ArrayList只在这一个线程中使用,那么肯定是没问题的。
示例代码参考:http://blog.csdn.net/xiao__gui/article/details/8934832
相关文章推荐
- Java多线程:线程安全和非线程安全的集合对象
- Java多线程:线程安全和非线程安全的集合对象
- Java线程,多线程,同步锁,线程安全
- Java ,单实例 多线程 ,web容器,servlet与struts1-2.x系列,线程安全的解决方案
- sqlite4java中的多线程队列使用(线程安全)
- Java多线程有哪几种实现方式? Java中的类如何保证线程安全? 请说明ThreadLocal的用法和适用场景(面试题)
- 关于java中多线程的问题的一点思考(什么情况下需要考虑到线程,以及线程安全的问题?)
- JAVA多线程(二)构建线程安全的类
- Java多线程之~~~线程安全容器的非堵塞容器
- 【深入分析JAVA多线程】(1)详解进程、线程以及线程安全
- java——多线程——单例模式的static方法和非static方法是否是线程安全的?
- 【Java多线程】之八:单例模式的线程安全
- JAVA_多线程_用继承的方式实现多窗口售票并用同步代码块的方式保证线程安全
- java笔记-多线程-线程安全
- java多线程 --ConcurrentLinkedQueue 非阻塞 线程安全队列
- java多线程(五) 之 设计线程安全的类
- java多线程高并发线程安全问题
- Java多线程理解:线程安全的集合对象
- Java_基础—多线程(线程安全问题)
- Java多线程与线程安全