关于java 线程安全的总结
2016-12-24 15:13
323 查看
线程安全:
何为线程安全?在JVM分配的内存空间中,当一份数据被多个线程访问时,如果涉及修改,此时数据按照正常逻辑变化,而不是发生一些意想不到的结果,此时该数据为线程安全
java中哪些线程安全
1.变量:局部变量与实例变量,局部变量在每次方法调用时,都会开辟栈空间,不涉及到共用一份内存中的数据,同理实例变量也一样,所有线程安全
类变量(static),在内存中共享一份内存空间,因此为非线程安全
2.方法:如果类方法与实例方法中不涉及到对静态变量的修改等操作,则也为线程安全
解决方式:
1.使用代码锁机制,也就是synchronized,对内存中共享的数据采用锁机制,每次只允许一个线程进行访问修改,采用以时间换空间,保证数据一致性
2.使用ThreadLoacle机制,也就是线程局部变量,每个线程都会分配一份数据,线程对该数据的改动都是基于线程自己的,而不会影响到其他线程,保证了各线程数据的一致性,采用以空间换时间的机制
总结:
结合java 内存空间的分配来理解多线程安全问题
何为线程安全?在JVM分配的内存空间中,当一份数据被多个线程访问时,如果涉及修改,此时数据按照正常逻辑变化,而不是发生一些意想不到的结果,此时该数据为线程安全
java中哪些线程安全
1.变量:局部变量与实例变量,局部变量在每次方法调用时,都会开辟栈空间,不涉及到共用一份内存中的数据,同理实例变量也一样,所有线程安全
类变量(static),在内存中共享一份内存空间,因此为非线程安全
2.方法:如果类方法与实例方法中不涉及到对静态变量的修改等操作,则也为线程安全
解决方式:
1.使用代码锁机制,也就是synchronized,对内存中共享的数据采用锁机制,每次只允许一个线程进行访问修改,采用以时间换空间,保证数据一致性
2.使用ThreadLoacle机制,也就是线程局部变量,每个线程都会分配一份数据,线程对该数据的改动都是基于线程自己的,而不会影响到其他线程,保证了各线程数据的一致性,采用以空间换时间的机制
总结:
结合java 内存空间的分配来理解多线程安全问题
相关文章推荐
- 搭建JavaWeb开发环境使用IDEA开发工具
- Java运行时常量池与final修饰符的关系
- Java中的Socket的用法
- 遍历map集合Iterator保存对象
- java IO增强
- 几种常用的webservice客户端和spring集成的方法
- Java并发编程:volatile关键字解析
- java中的MP3播放核心代码
- 使用list集合遍历对象
- 使用set集合遍历保存对象
- SpringMVC配置讲解(一)
- 使用map集合泛型保存对象
- Java实现输入流转化为String
- Java 使用IO流实现大文件的分割与合并实例详解
- Java、mysql支持emoji表情
- Java压缩和解压文件工具类ZipUtil
- eclipse开发小技巧
- 设计模式之装饰器模式
- JAVA 通过反射获取泛型的类型
- LeetCode 477. Total Hamming Distance