java中解决脏读_java并发编程学习之脏读代码示例及处理
使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回。这里需要注意的是,如果只是单纯的调用interrupt()方法,线程并没
public class Thread10 {
public static void main(String[] args) {
Thread10_Entity entity = new Thread10_Entity();
Thread10_1 t10_1 = new Thread10_1(entity);
t10_1.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(entity.get());
}
}
class Thread10_1 extends Thread {
private Thread10_Entity thread10_Entity;
public Thread10_1(Thread10_Entity t10) {
this.thread10_Entity = t10;
}
@Override
public void run() {
thread10_Entity.set("admin", "admin");
}
}
class Thread10_Entity {
private String username = "user";
private String password = "user";
synchronized void set(String username, String password) {
this.username = username;
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.password = password;
}
String get() {
return username + " " + password;
}
}
运行结果:admin userExecutor框架简介 在Java 5之后,并发编程引入了一堆新的启动、调度和管理线程的API。Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,
加上sleep只是为了放大错误,便于观察。
有任何疑问欢迎留言或者加企鹅群(282034885)讨论
那么如何避免脏读呢?上篇文章(java并发编程学习之一段简单代码证明synchronized锁的是对象)中提到过,synchronized锁的是对象,这里就可以用上了。
在get方法上加上synchronized关键字即可,在set没处理完之前,对对象加锁,避免其他线程进行脏读。
java中解决脏读_java并发编程学习之脏读代码示例及处理相关推荐
- java 对象 线程安全_JAVA并发编程学习:构造线程安全的对象
设计线程安全的类 实例限制 当一个对象被另一个对象封装时,所有访问被被封装对象的代码路径就是全部可知的,这相比于让对象可被整个系统访问来说,更容易对代码路径进行分析.将数据封装在对象内部,把对数据的访 ...
- java中同步组件_Java并发编程(自定义同步组件)
并发包结构图: 编写一个自定义同步组件来加深对同步器的理解 业务要求: * 编写一个自定义同步组件来加深对同步器的理解. * 设计一个同步工具:该工具在同一时刻,只允许至多两个线程同时访问,超过两个线 ...
- java公平锁和非公平锁_java并发编程学习之再谈公平锁和非公平锁
在java并发编程学习之显示锁Lock里有提过公平锁和非公平锁,我们知道他的使用方式,以及非公平锁的性能较高,在AQS源码分析的基础上,我们看看NonfairSync和FairSync的区别在什么地方 ...
- java 共享锁 独占锁_Java并发编程锁之独占公平锁与非公平锁比较
Java并发编程锁之独占公平锁与非公平锁比较 公平锁和非公平锁理解: 在上一篇文章中,我们知道了非公平锁.其实Java中还存在着公平锁呢.公平二字怎么理解呢?和我们现实理解是一样的.大家取排队本着先来 ...
- java并发进程共享变量_JAVA并发编程学习:共享对象
可见性 在一个单线程程序中,如果向一个变量先写入值,然后在没有写干涉的情况下读取这个变量,会得到相同的返回值.但是当读和写发生在不同的线程中时,就不能保证读线程及时地读取其他线程写入的值.在JAVA中 ...
- 网易云课堂微专业--Java高级开发工程师--多线程并发编程--学习笔记(二)
文章目录 第一章 多线程并发编程 第二节 线程安全问题 1.2.1 线程安全之可见性问题 多线程中的问题 从内存结构到内存模型 工作内存缓存 指令重排序 内存模型的含义 Shared Variable ...
- java后验条件_JAVA并发实战学习笔记——3,4章~
JAVA并发实战学习笔记 第三章 对象的共享 失效数据: java程序实际运行中会出现①程序执行顺序对打乱:②数据对其它线程不可见--两种情况 上述两种情况导致在缺乏同步的程序中出现失效数据这一现象, ...
- java 关闭守护线程_Java并发编程之线程生命周期、守护线程、优先级、关闭和join、sleep、yield、interrupt...
Java并发编程中,其中一个难点是对线程生命周期的理解,和多种线程控制方法.线程沟通方法的灵活运用.这些方法和概念之间彼此联系紧密,共同构成了Java并发编程基石之一. Java线程的生命周期 Jav ...
- java线程本地变量_Java并发编程示例(九):本地线程变量的使用
这篇文章主要介绍了Java并发编程示例(九):本地线程变量的使用,有时,我们更希望能在线程内单独使用,而不和其他使用同一对象启动的线程共享,Java并发接口提供了一种很清晰的机制来满足此需求,该机制称 ...
最新文章
- SubVersion(SVN) 服务器Windows安装指南
- 2019年全球企业人工智能发展现状分析报告
- 伊利诺伊大学厄巴纳-香槟分校
- 八周二次课 rsync工具介绍,常用参数选项以及和ssh同步
- 一天搞定CSS:表单(form)--20
- 只需3步,随时随地玩转数据分析
- 【Spark】Spark的Kryo序列化
- POJ 3294 Life Forms
- 学习使用NMF非负矩阵分解算法
- 前端汉字encode_JavaScript URL汉字编码转换
- JavaScript浮动广告
- 艺术类职称计算机考试,2017年职称计算机考试Word2003巩固练习题20
- mysql存储过程算四分位
- C++高阶 常对象和常函数
- matlab s-function找不到
- 【Pyhton TurtleArt】画一幅极简渐变风景图
- 安装design compiler的教程
- 2021年全国职业院校技能大赛(中职组)网络安全竞赛试题(1)详细解析教程
- 三维点云学习(6)7-3D Object Detection-KITTI object detection evaluation(2)-kitt 数据集文件分卷解压方式
- Java多线程——线程池使用示例