线程安全的定义:
<<Java Concurrency In Practice>>的作者Brian Goetz 对"线程安全"有一段定义: 当多个线程访问一个对象的时候, 如果不用考虑这些线程在运行时环境下的调度和交替执行, 也不需要惊醒额外的同步,或者在调用方惊醒任何其他的协调操作,调用这个对象的行为都可以获取正确的结果,那这个对象就是线程安全的.
我们把java中各种操作共享的数据分成一下5类:
不可变, 绝对线程安全, 相对线程安全, 线程兼容, 线程对立.
线程安全的实现方法:
(1) 互斥同步:
互斥是因, 同步是果,推荐使用 synchronized 关键字进行同步, 在 concurrent包中有ReentrantLock类, 实现效果差不多. 还是推荐原生态的synchronized.
(2) 非阻塞同步:
需要硬件指令完成.常用的指令有:
Test-and-Set
Fetch-and-Increment
Swap
Compare-and-Swap (CAS)
Load-Linked/Store-Conditional (LL/SC)
典型的应用在 AtomicInteger 中
(3) 无同步方案
可重入代码: 在代码执行的任何时刻中断它, 转而去执行另外一段代码,而在控制权返回后,原来的程序不会出现任何错误.
可重入代码有一些共同的特性: 例如不以来存储在堆上的数据和公用的系统资源,用到的状态量都由参数中传入,不调用非可重入的方法等.
线程本地存储: 如果一段代码中所需要的数据必须与其他代码共享,那就看看这些共享数据的代码是否能保证在统一线程中执行?如果能保证,可以把共享数据的可见范围限制在同一个线程中,这样,无需同步也能保证线程之间不出现数据争用问题. 在java中可以通过使用 java.lang.ThreadLocal 开实现线程本地存储的功能.
这种应用在人人网的开源框架 Rose 有广泛的应用,最经典的应用在获取当前登录用户对象的时候, 是通过t票 到cache中来拿到当前登录用户的user对象. 对象就保存在 ThreadLocal 中. 经典的web交互模型中"一个请求对应一个服务器线程"的处理方式, 把user对象保存在线程本地存储中 可以很好的解决线程安全的问题.
分享到:
相关推荐
它展示了如何与非线程安全的类共同工作,并特别关注于Swing的线程问题。新增加的一章介绍了如何为多处理器机器编写并行代码。 简而言之,本书的新版涉及了有关线程的方方面面,从最简单的动画applet到最复杂的应用...
基于Java多线程与线程安全实践-基于Http协议的断点续传设计与实现.zip基于Java多线程与线程安全实践-基于Http协议的断点续传设计与实现.zip基于Java多线程与线程安全实践-基于Http协议的断点续传设计与实现.zip基于...
java内存模型和线程安全,详细解析java的 堆栈模型和线程机制
操作系统c++编程实现安全型双向链表,线程的创建,利用线程对链表进行增删改操作,并检验结果是否正确
java线程深入讲解,可以了解java线程同步语安全,实现的方法和synchronized锁的使用与安全控制等等,谁用谁知道好用
java多线程安全性基础介绍 线程安全 正确性 什么是线程安全性 原子性 竞态条件 i++ 读i ++ 值写回i 可见性 JMM 由于cpu和内存加载速度的差距,在两者之间增加了多级缓存导致,内存并不能直接对cpu可见。 ...
NULL 博文链接:https://liuxianwei.iteye.com/blog/2390291
非线程安全的类 总结 第九章 多处理器机器上的并行化 单线程程序并行化 内层循环线程化 循环输出 多处理器扩展 总结 第十章 线程组 线程组概念 创建线程组 线程组方法 操作线程组 线程组、线程和安全 总结
[计算机毕设]基于java的多线程与线程安全实践-基于Http协议的断点续传系统设计与实现(源代码).zip [计算机毕设]基于java的多线程与线程安全实践-基于Http协议的断点续传系统设计与实现(源代码).zip [计算机毕设]基于...
六、线程安全类 七、线程死锁 八、线程同步小结 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:volatile关键字 Java线程:新特征-线程池 一、固定大小的线程池 二、单任务线程池 三、可变尺寸...
可以使用Java中的同步机制,如使用synchronized关键字或者使用线程安全的集合类来保证多线程操作的安全性。 实现步骤: 创建一个下载管理器类,用于管理下载任务和线程池。 在下载管理器中实现多线程下载的逻辑,...
主要介绍了Java线程安全与非线程安全解析,涉及非线程安全现象模拟以及线程安全的实现等相关内容,需要的朋友可以参考,一起交流学习。
主要介绍了Java线程安全的计数器简单实现代码示例,具有一定参考价值,需要的朋友可以了解下。
这个压缩文件包含了一个Java多线程与线程安全实践的项目,它是基于Http协议的断点续传实现。 在这个项目中,我们将学习如何使用Java多线程技术来加速文件的下载和上传,同时保证线程安全。 该项目在实现断点续传时...
Java多线程与线程安全实践-基于Http协议的断点续传.rar 是一个Java毕业设计项目,旨在探讨如何在Java中实现多线程下载和断点续传功能,同时确保线程安全。该项目的主要特点如下: 1. 多线程下载:项目采用了Java的...
首先并发并不是我们通常我们认为的必须依靠线程才能实现,但是在Java中并发的实现是离不开线程的,线程的主要实现有三种方式:使用内核线程(KernelThread,KLT)实现使用用户线程实现使用用户线程加轻量级进程混合...
java实现多线程下载文件功能,通过线程池管理,实现下载文件速度快,安全。
java线程安全-往盘子里放鸡蛋和向盘子里取鸡蛋代码实现