java多线程基础——i--和System.out.println()的异常出现的非线程安全问题

2023-05-16

继上一节的内容,在println方法内虽然说内部是同步的,但是i- -的操作却在println方法之前发生了,所以这依旧属于非线程安全问题
代码如下:

package MyThread;

public class mythread extends Thread{
	private int i=5;
	@Override
	 public void run() {	
			System.out.println("i=="+(i--)+"threadName="+Thread.currentThread().getName());				
	}
}

run方法:

package test;
import MyThread.mythread;
public class Run {
	public static void main(String[] args) {
		mythread run=new mythread();
		Thread t1=new Thread(run);
		Thread t2=new Thread(run);
		Thread t3=new Thread(run);
		Thread t4=new Thread(run);
		Thread t5=new Thread(run);
		t1.start();
		t2.start();
		t3.start();
		t4.start();
		t5.start();
	}
	
}

运行结果:
在这里插入图片描述
所以说,为了防止发生这种现象,还是应该继续使用同步的方法,也就是——synchronized
对于println方法内部同步:

public void println(String x){
 synchronized(this){
   print(x);
   newLine();
 }
}

同步方法之后:(直接在run方法前加上关键字synchronized即可)
在这里插入图片描述
可以看到得到了我们想要的结果
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java多线程基础——i--和System.out.println()的异常出现的非线程安全问题 的相关文章

  • PX4源码分析15:初次编译,No CMAKE_CXX_COMPILER could be found,需要设置环境变量CXX

    简略描述 xff1a 验证nuttx安装完整性 第一步 xff1a arm none eabi gcc version 第二步 xff1a sudo apt install gcc arm none eabi 再次编译问题解决 详细描述 笔
  • C++常识1:字符串末尾为什么要加‘\0’

    在C C 43 43 语言中 xff0c 字符串是用字符数组来表示的 但是 xff0c 字符数组中的内容 xff0c 直接显示 xff0c 可能会出现乱码 xff0c 因为编译器从物理内存中解释字符串时 xff0c 从数组头部开始依次显示字
  • PX4运行时,输入top命令,查看系统运行状态

  • matlab:读取/写入

    importdata 能读取csv jpg bmp avi文件 figure存为bmp xff1a saveas 读取csv文件 xff1a csvread 写入csv文件 xff1a csvwrite 读取bmp文件 xff1a imre
  • 初学opencv

    https zhuanlan zhihu com p 568218818 https www zhihu com question 346053854 answer 2518654077 Halcon
  • 树莓派驱动水星无线网卡(MW150UH)教程指南

    目录 1 树莓派版本 2 无线网卡 查询无线网卡 1 如果为 Bus 001 Device 005 ID 0bda b711 Realtek Semiconductor Corp RTL8188GU 802 11n WLAN Adapter
  • matlab-快速查看数据分布

    1 如果你有一个数组 xff0c 想看数据分布 xff0c 可以调用hist xff0c 便可生成柱状分布图 xff1b 2 如果你有两个数组 xff0c 想对比两个数据的分布 xff0c 可以把两个数组放到一起拼成n行2列的矩阵 xff0
  • 设计一个简单的飞控硬件主要需要哪些元器件?

    主控芯片 xff1a STM32F407VGT6 稳压芯片 xff1a MIC5219 姿态传感器 xff1a MPU6050 磁力计 xff1a HMC5883L 气压计 xff1a MS5611 存储器 xff1a 24C02 USB串
  • AD中怎样修改原理图图纸大小

    方法一 xff1a 双击原理图纸框外的空白区域 2 在Standard Styles选项中调整原理图尺寸 方法二 xff1a 在工具栏中 gt 点击Design gt 点击Document Options gt 找到Standard sty
  • 为什么原理图中元器件下面有红色波浪线?

    为什么原理图中元器件下面有红色波浪线 xff1f 答 xff1a 因该元器件元器件的名字 xff08 disignator xff09 与别的元器件的名字重复了 解决方案 xff1a 对原理图中的元器件进行手动编号或自动编号 对元器件进行自
  • RT9193稳压芯片的电路原理图

    典型接线示意图 xff1a 问 xff1a 引脚BP是什么作用 xff1f 答 xff1a Reference Noise Bypass 参考噪声旁路 各引脚功能如下表 xff1a
  • 24C02原理图设计+管脚配置+管脚描述

  • 怎样介绍飞行器设计与工程这个专业?(手稿&视频字幕)

    1 从童年对纸飞机的喜爱引入 还记得童年的纸飞机吗 xff1f TA记载着我们童年的喜怒哀乐 还有我们对天空无限的憧憬和向往 2 1903年莱特兄弟第一次实现了人类的飞天梦 3 如今飞行器的发达 4 目前飞行器的飞行原理 xff1a 空气动
  • src路径是什么意思?

    src在软件中都是指source xff0c 也就是源代码的意思 在很多语言的工程里都一个src文件夹用来存放源代码以区别开其它文件 xff08 模板文件 Web文件等 xff09 对于Java来说 xff0c 就是主要用来存放后缀名为 j
  • Telnet&Https&SSL简介

    Telnet协议是TCP IP协议族中的一员 xff0c 是Internet远程登陆服务的标准协议和主要方式 它为用户提供了在本地计算机上完 成远程主机工作的能力 在终端使用者的电脑上使用telnet程序 xff0c 用它连接到服务器 终端
  • 解决MyEclipse保存时出现“Save could not be completed”问题

    一 问题 修改完jsp文件后出现如下问题 二 解决方法 window gt Preferences gt General gt Content Types gt Text gt 选中出现保存问题的文件类型 xff08 如JSP xff09
  • webpack devtool详解

    前言 devtool也是之前常用的一个配置 xff0c 我们稍微了解下吧 xff0c 不研究太深 xff0c 毕竟现在都不怎配置他 内容 devtool是配置sourceMap的 sourceMap大家都知道 xff0c 我们本地或者测试环
  • 数据结构一:绪论小知识

    数据结构一 xff1a 绪论 说明知识框架常见的例题集合欣总一炮 xff1a 说明 这部分并不在考研的考纲里面 xff0c 但是在进入数据结构这门课程学习上 xff0c 非常有帮助 xff0c 一步一步走嘛 知识框架 xff08 该图来自2
  • 数据结构实验之——二叉树前中后递归和非递归遍历的实现

    二叉树前中后递归和非递归遍历的实现 表述形式代码测试结果 表述形式 在这里我在非递归方面前序遍历和中序遍历都提供了两种不同的算法 xff0c 一种是我自己根据性质和原理写的还有一种就是比较普遍的算法 xff0c 代码也已经测试过啦 xff0
  • 数据结构实验之——哈夫曼树的实现

    数据结构实验之 哈夫曼树的实现 目录说明代码测试用例 目录 说明 哈夫曼树的这个实验我是采用常用的左 0 右 1 来实现的 xff0c 输入是用文本输入的 xff0c 大家在用之前目录下要记得创建 HT txt 文件o xff0c 下面的测

随机推荐