使用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并发编程学习之脏读代码示例及处理相关推荐

  1. java 对象 线程安全_JAVA并发编程学习:构造线程安全的对象

    设计线程安全的类 实例限制 当一个对象被另一个对象封装时,所有访问被被封装对象的代码路径就是全部可知的,这相比于让对象可被整个系统访问来说,更容易对代码路径进行分析.将数据封装在对象内部,把对数据的访 ...

  2. java中同步组件_Java并发编程(自定义同步组件)

    并发包结构图: 编写一个自定义同步组件来加深对同步器的理解 业务要求: * 编写一个自定义同步组件来加深对同步器的理解. * 设计一个同步工具:该工具在同一时刻,只允许至多两个线程同时访问,超过两个线 ...

  3. java公平锁和非公平锁_java并发编程学习之再谈公平锁和非公平锁

    在java并发编程学习之显示锁Lock里有提过公平锁和非公平锁,我们知道他的使用方式,以及非公平锁的性能较高,在AQS源码分析的基础上,我们看看NonfairSync和FairSync的区别在什么地方 ...

  4. java 共享锁 独占锁_Java并发编程锁之独占公平锁与非公平锁比较

    Java并发编程锁之独占公平锁与非公平锁比较 公平锁和非公平锁理解: 在上一篇文章中,我们知道了非公平锁.其实Java中还存在着公平锁呢.公平二字怎么理解呢?和我们现实理解是一样的.大家取排队本着先来 ...

  5. java并发进程共享变量_JAVA并发编程学习:共享对象

    可见性 在一个单线程程序中,如果向一个变量先写入值,然后在没有写干涉的情况下读取这个变量,会得到相同的返回值.但是当读和写发生在不同的线程中时,就不能保证读线程及时地读取其他线程写入的值.在JAVA中 ...

  6. 网易云课堂微专业--Java高级开发工程师--多线程并发编程--学习笔记(二)

    文章目录 第一章 多线程并发编程 第二节 线程安全问题 1.2.1 线程安全之可见性问题 多线程中的问题 从内存结构到内存模型 工作内存缓存 指令重排序 内存模型的含义 Shared Variable ...

  7. java后验条件_JAVA并发实战学习笔记——3,4章~

    JAVA并发实战学习笔记 第三章 对象的共享 失效数据: java程序实际运行中会出现①程序执行顺序对打乱:②数据对其它线程不可见--两种情况 上述两种情况导致在缺乏同步的程序中出现失效数据这一现象, ...

  8. java 关闭守护线程_Java并发编程之线程生命周期、守护线程、优先级、关闭和join、sleep、yield、interrupt...

    Java并发编程中,其中一个难点是对线程生命周期的理解,和多种线程控制方法.线程沟通方法的灵活运用.这些方法和概念之间彼此联系紧密,共同构成了Java并发编程基石之一. Java线程的生命周期 Jav ...

  9. java线程本地变量_Java并发编程示例(九):本地线程变量的使用

    这篇文章主要介绍了Java并发编程示例(九):本地线程变量的使用,有时,我们更希望能在线程内单独使用,而不和其他使用同一对象启动的线程共享,Java并发接口提供了一种很清晰的机制来满足此需求,该机制称 ...

最新文章

  1. SubVersion(SVN) 服务器Windows安装指南
  2. 2019年全球企业人工智能发展现状分析报告
  3. 伊利诺伊大学厄巴纳-香槟分校
  4. 八周二次课 rsync工具介绍,常用参数选项以及和ssh同步
  5. 一天搞定CSS:表单(form)--20
  6. 只需3步,随时随地玩转数据分析
  7. 【Spark】Spark的Kryo序列化
  8. POJ 3294 Life Forms
  9. 学习使用NMF非负矩阵分解算法
  10. 前端汉字encode_JavaScript URL汉字编码转换
  11. JavaScript浮动广告
  12. 艺术类职称计算机考试,2017年职称计算机考试Word2003巩固练习题20
  13. mysql存储过程算四分位
  14. C++高阶 常对象和常函数
  15. matlab s-function找不到
  16. 【Pyhton TurtleArt】画一幅极简渐变风景图
  17. 安装design compiler的教程
  18. 2021年全国职业院校技能大赛(中职组)网络安全竞赛试题(1)详细解析教程
  19. 三维点云学习(6)7-3D Object Detection-KITTI object detection evaluation(2)-kitt 数据集文件分卷解压方式
  20. Java多线程——线程池使用示例

热门文章

  1. 11-Memory Management Examples
  2. DVWA学习(三)Brute Force(暴力破解)
  3. 提权 调试权限 OpenProcess 拒绝访问的解决办法
  4. 返回对象2(调用了拷贝构造函数)
  5. 蓝队视角下的企业安全运营
  6. 一个含有crc32算法的CrackMe分析
  7. 160个Crackme003之4C大法详解
  8. 3、Swing布局管理器
  9. MySQL解决root用户密码丢失问题
  10. 【LeetCode】0046.全排列 (递归详解)