java并发编程实战源码_java并发编程实战(附源码)

本文通过一个线程不安全的代码示例(UnsafeSequence)来探讨并发编程中的问题,展示了在多线程环境下,由于非原子操作导致的线程安全问题。通过CountDownLatch进行线程同步,确保所有线程执行完毕,并提供了修复此类问题的思路。
摘要由CSDN通过智能技术生成

线程不安全代码测验

private static class UnsafeSequence { private int value; public int getNext() { return value++; } } 使用两个线程分别调用上面的getNext方法1000次,出现了一次线程不安全的情况,在转出的结果中有两个1311:

图片.png

原因剖析,与书上说的一致:

ced24e6b905fa11a8490983df744f64a.png

图片.png

完好的代码

import java.io.PrintWriter; import java.util.concurrent.CountDownLatch; /** * Created by luohao07 on 2018/1/2. */ public class UnsafeSequenceTest { public static void main(String[] args) throws Exception{ UnsafeSequence unsafeSequence = new UnsafeSequence(); PrintWriter out = new PrintWriter("out.txt"); CountDownLatch countDownLatch = new CountDownLatch(2); new Thread() { @Override public void run() { for (int i = 0; i < 1000; i++) { out.println(unsafeSequence.getNext() + " T1"); } countDownLatch.countDown(); } }.start(); new Thread() { @Override public void run() { for (int i = 0; i < 1000; i++) { out.println(unsafeSequence.getNext()+" T2"); } countDownLatch.countDown(); } }.start(); countDownLatch.await(); out.flush(); out.close(); } private static class UnsafeSequence { private int value; public int getNext() { return value++; } }} Timer执行定时使命

public class TimerTest { public static void main(String[] args) { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { System.out.println("invoke...."); } }, new Date(System.currentTimeMillis() + 5000)); }} 程序启动后5秒输出invoke....

JAVA交流学习

每天干货分享

长按扫码关注我们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值