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

java并发编程实战源码_java并发编程实战(附源码)线程不安全代码测验 privatestati privateintva publicintget returnvalue 使用两个线程分别调用上面的 getNext 方法 1000 次 出现了一次线程不安全的情况 在转出的结果中有两个 1311 图片 png 原因剖析 与书上说的一致 图片 pn

线程不安全代码测验

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交流学习

每天干货分享

长按扫码关注我们

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213014.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午6:45
下一篇 2026年3月18日 下午6:45


相关推荐

  • Ubuntu Linux分区规划

    Ubuntu Linux分区规划我在网上查了一些资料 但大家的说法不一 我也不知道究竟哪个分区方案更好一些 以下内容也是从网络的文章摘抄 如果有错误另行修改 nbsp 一 关于分区 nbsp nbsp nbsp nbsp nbsp 每个硬盘分区最多可以分出 4 个主分区 其中包括扩展分区 扩展分区要占用一个主分区号 那也就是说主分区 扩展分区最多是 4 个 如果分出了 4 个主分区则扩展分区没有办法分了 早期的 dos windows 只承认一个主分区 因此分成 一个主分区 扩

    2026年3月19日
    3
  • Git master branch has no upstream branch的解决

    Git master branch has no upstream branch的解决Gitmasterbra 的解决在 push 代码时 出现 gitmasterbra 问题的原因是没有将本地的分支与远程仓库的分支进行关联 如下图所示 具体原因 出现这种情况主要是由于远程仓库太多 且分支较多 在默认情况下 gitpush 时一般会上传到 origin 下的 master

    2026年3月16日
    2
  • Python– lxml用法

    Python– lxml用法目录 lxml 库 lxml 安装可查看上一篇文章 Element 类 1 节点操作 2 属性操作 3 文本操作 4 文件解析与输出 5 ElementPath6 案例 尤其最后的一篇代码 nbsp nbsp lxml 库 lxml 安装可查看上一篇文章 python 的 HTML XML 的解析器 官方文档 nbsp http lxml de index html 功能 解析 HTML

    2026年3月18日
    1
  • vue强制刷新页面方法_vue页面回退不刷新

    vue强制刷新页面方法_vue页面回退不刷新方法一:在app.vue中定义reload()方法。<template><divid=”app”><router-viewv-if=”isReload”/></div></template><script>exportdefault{name:’App’,provide(){return{reload:this.reload}

    2025年6月21日
    7
  • JAVA内存泄漏和内存溢出的区别和联系

    JAVA内存泄漏和内存溢出的区别和联系JAVA 内存泄漏和内存溢出的区别和联系 1 内存泄漏 memoryleak 是指程序在申请内存后 无法释放已申请的内存空间 一次内存泄漏似乎不会有大的影响 但内存泄漏堆积后的后果就是内存溢出 2 内存溢出 outofmemory 指程序申请内存时 没有足够的内存供申请者使用 或者说 给了你一块存储 int 类型数据的存储空间 但是你却存储 long 类型的数据 那么

    2026年3月19日
    3
  • Linux 查看环境变量_linux修改jdk环境变量

    Linux 查看环境变量_linux修改jdk环境变量Linux的变量种类按变量的生存周期来划分,Linux变量可分为两类:1永久的:需要修改配置文件,变量永久生效。2临时的:使用export命令声明即可,变量在关闭shell时失效。设置变量的三种方法1在/etc/profile文件中添加变量【对所有用户生效(永久的)】用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。例如:编辑/etc…

    2026年4月17日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号