线程共享实例变量


public class Machine extends Thread {
	private int a = 0; // 实例变量
	
	public void run() {
		for(a = 0; a < 50; a++) { // 使用Machine对象的实例变量a
			System.out.println(currentThread().getName() + ":" + a);
				try {
					sleep(100); // 给其他线程运行的机会
				} catch (InterruptedException e) {
					throw new RuntimeException(e);
				}
		}
	}
	
	public static void main(String[] args) {
		Machine m1 = new Machine();
		m1.start(); // 启动第一个Machine线程
		m1.run();   // 主线程执行第一个Machine对象的run()方法
	}
}



运行程序,查看结果: 


main:0
Thread-0:0
main:1
Thread-0:2
...
main:21
Thread-0:21
...


 首先理解下为什么会出现main:0和Thread-0:0


 m1.run():刚开始调用这个方法的时候,会给a赋初值,a=0

 m1.start():刚开始调用这个线程的时候,也会给a赋初值a=0

 其实就是每次调用run()方法的时候  for(a = 0; a < 50; a++){}都会给变量a赋一次初值0




而运行过程中还会出现下面的情况:

main:21

Thread-0:21

 既然主线程和Machine线程共享实例变量a,轮流将a的值加上1,怎么还会出现两个线程出现想等的值呢?


下面用张示意图,大致画了一下可能会出现的位置



 

这个时候Machine线程所打印出来的变量a的值正好和主线程运行时变量a的值相等


 

PS/2鼠标接口协议 一、PS/2鼠标接口        PS/2接口用于许多现代的鼠标和键盘,由IBM最初开发和使用。物理上的PS/2接口有两种类型的连接器:5脚的DIN和6脚的MINI-DIN。        二、鼠标的接口协议原理             PS/2鼠标接口采用一种双向同步串行协议。即每在时钟线上发一个脉冲,就在数据线上发送一位数据。但是在相互传输中 ,主机是拥有总线控制权的 阅读详情

相关推荐

【密码专栏】超强进阶:PLONK VS Groth16(上)

前言 前文《天冷了,干了这碗“零知识证明”鸡汤》对「零知识证明学习」作了一个形象化的比喻:炖鸡汤。那么本系列的主要内容可以简单概括为《论高压锅炖鸡汤的一百种方法》之方法二。在学会了“清炖鸡汤”之后,不如来一口“阿胶鸡汤”补补脑细胞吧! 正如鸡汤不同风味之间各具千秋,不同的zk-SNARK方案也各有所长。zk-SNARK方案可以被分为【通用】与【非通用】zk-SNARK,PLONK与Groth16分别是其中的典型代表。通过本系列,我们将对PLONK算法内容作简要介绍,并指出PLONK和Groth16算法思路上

Hyperchain的博客 1807

多线程中实例变量的共享与非共享

自定义线程类中的实例变量对其他线程有共享和非共享之分,这在多线程之间进行交互时是很重要的一个技术点。 1)共享变量实现 线程类定义: public class Mythread extends Thread{ private int count=3; public void run(){ count--; System.out...

乐点的博客 1444

【Unity】Unity性能分析解决方案——UPR

由Unity中国团队提供的一套性能优化解决方案,其是一系列性能工具的集合,并可将收集的数据进行可视化。

Davidorzs的博客 1009

Java-Runnable线程共享实例变量

/** *测试Runnable线程可以共享实例变量 */public class TestRunnable implements Runnable { private int i; public void run() { i++; System.out.println(Thread.currentThread().getName()+" i="+i

ohcezzz的博客 2628

【yolov8】与yolov5的区别及改进详解

yolov8-----有点厉害的目标检测框架.

qq_44878985的博客 3万+

GD32F103程序烧录全攻略:从SWD到串口的实战指南

本文提供了GD32F103微控制器程序烧录的全面实战指南,详细介绍了SWD、JTAG和串口(ISP)三种主流下载方式。文章重点解析了在Keil MDK中使用ST-Link进行SWD下载的完整步骤,包括硬件连接、软件配置和Flash算法设置,并针对烧录过程中的常见问题提供了实用的排坑解决方案,帮助开发者高效完成程序部署。

weixin_29191669的博客 439

自定义线程类中实例变量与其他线程共享与不共享

1. 不共享情况: package java_thread.learn01.c002; public class MyThread extends Thread {     private int count = 5;     public MyThread(String name){         super();         this.setName(name);

春华秋实 1619

半导体物理基础:载流子输运理论_(4).载流子浓度与费米能级

费米能级(Fermi Level)是描述半导体中电子和空穴能量分布的基准能级。在绝对零度下,费米能级以下的所有能级都被电子占据,费米能级以上的所有能级都是空的。随着温度的升高,电子会获得足够的能量跃迁到费米能级以上的能级,形成导带中的自由电子和价带中的空穴。费米能级在半导体中的位置取决于掺杂浓度和温度。对于本征半导体,费米能级位于禁带的中心;对于掺杂半导体,费米能级会偏移,具体位置取决于掺杂类型和浓度。载流子浓度(Carrier Concentration)是指半导体中自由电子和空穴的数量密度。

2401_87715305的博客 836

多线程共享实例变量例子

多线程共享实例变量例子 在网上查了资料,说类的实例变量是多线程共享的。经过实验为什么不是呢?请看下面的代码 package test; public class ThreadDemo extends Thread{ private int i = 0; @Override public void run() {    System.out.println(this +":"

colder2008的专栏 1378

基于CrossSim的存储硬件原型机ANN仿真:MNIST手写数字识别实现与分析

本项目基于CrossSim仿真平台,在存储硬件原型机上实现了MNIST手写数字识别的ANN模型。通过搭建CrossSim仿真环境,设计传统ANN基准模型和考虑硬件非理想特性的CrossSim模型,对比分析了不同配置下的识别性能。实验结果表明,在引入硬件噪声和器件变异的情况下,模型准确率仍能达到95%以上,验证了存储内计算架构的可行性。研究为存储硬件与计算单元融合提供了实验依据,展示了CrossSim在神经形态计算系统仿真中的实用价值。

huanghm88的专栏 597

知识追踪实战:lstm+ Multi-head Attention注意力机制的学生做题成绩预测实战

知识追踪实战:lstm+ Multi-head Attention注意力机制的学生做题成绩预测实战

2222

多线程之实例变量与线程安全

一:线程间数据不共享的实例 创建一个继承Thread类的java对象 测试类 效果: 结论 我们创建了3个线程,每个线程都有各自的count变量,自己减少自己的count 变量的值。这样的情况就是线程间变量不共享。 结构图如下: 表示线程间的数据不共享,各自存在各自的变量。 ...

花&败 603

22、常见加密哈希算法及安全机制解析

本文详细解析了多种常见加密哈希算法,包括SHA系列、RIPEMD、Tiger、HAVAL、Whirlpool等,涵盖其工作原理、安全性与性能对比。同时探讨了哈希攻击方式如预映像攻击和彩虹表,并介绍了盐、MAC、HMAC等防御机制。结合密码存储、消息完整性验证及区块链应用案例,分析了不同场景下的算法选择建议,并展望了哈希算法在创新、融合与标准化方面的未来发展趋势。

seed的博客 393

实例变量共享造成的非线程安全问题

文章目录不共享实例变量共享实例变量解决方案 不共享实例变量 测试代码 public class MyThreadNotShared extends Thread { private int count = 5; public MyThreadNotShared(String name){ super(); this.setName(name); } @Override public void run() { sup

用文字记录下每一个瞬间的感动和每一次思考的火花 10万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

JAVA多线程技术-实例变量是否共享

通过执行结果可以得出结论,线程1和线程2共享了执行体中的实例变量,线程1和2共同执行了0-4,Runnable和Callnable执行的效果是一致的,所以Runnable和Callnable实现的多线程共享实例变量,所以实际开发过程中用Runnable和Callnable比较多。...

Aldeo 2263

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java多线程的共享变量访问控制实例

最近打算去一家电商公司,对于高并发的数据访问控制有着严格的要求,近期打算把多线程的知识在好好补一下。 线程调度有五个状态; 开始,可运行,运行,阻塞,死亡。 启动线程有两种方法。继承Thread类或则实现Runnable接口,其实Thread类也实现了Runnbale接口并实现了接口中唯一的方法run。但是Thread实例只能启动一次,无法共享变量,因此Runnable的灵活性更高。Threa

超威半导体 6350

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java 多线程&实例变量共享造成的非线程安全问题与解决方案——9

通过在run()方法前加入synchronized关键字,使多个线程在执行 run()方法时,以排队的方式进行处理。一个线程调用run()方法前,先判 断run()方法有没有被上锁,如果run()方法被上锁,则说明其他线程正在 调用run()方法,必须等其他线程对run()方法调用结束后,该线程才可以 执行run()方法,这样也就实现了排队调用run()方法的目的,从而实现按 顺序对count变量减1的效果。synchronized可以对任意对象及方法加锁, 而加锁的这段代码称为“互斥区”或“临界区”。 .

爱的叹息的专栏 383

实例变量共享造成的非线程安全问题与解决方案-T128

package 多线程技能1; /** 实例变量共享造成的非线程安全问题与解决方案 */ class MyTheard extends Thread{ private int count =5; public MyTheard(String name){ super(); //设置线程姓名 this.setName(name); } @Override synchronized public void run() {

qq_43834878的博客 267

识别线程安全-共享变量与单实例

刚毕业的时候,总是搞不清什么是线程安全,只记得网上说,只要方法做到可重入,就是线程安全的,晕头晕脑,一头雾水。 今年读Java并发编程,对并发有了进一步的了解,结合我们项目的实际应用,谈一下我对线程安全的认识。 一、共享变量(share varibles)引起线程安全 如果没有共享,就不会有线程安全问题。比如,你写的就是一个简单的helloword程序,不会有线程安全问题。但如果你的程序是...

donlian的专栏 223

mysql 会话变量 多线程_servlet如何工作?实例化,会话,共享变量和多线程

servlet如何工作?实例化,会话,共享变量和多线程ServletContext当servlet容器(如Apache Tomcat)启动时,它将部署并加载其所有Web应用程序。加载Web应用程序时,servlet容器会创建ServletContext一次并将其保留在服务器的内存中。在Web应用程序的web.xml文件进行分析,每个,和发现(或每一类注释用@WebServlet,@WebFilte...

weixin_35988311的博客 177

继承Thread类与实现Runnable接口创建线程对于类实例变量共享的区别

1、继承Thread类  1)以继承Thread类的方式来创建线程,多个线程之间是不会共享类的实例变量的,当然肯定会共享类变量。下面通过一个例子来看一下:public class Ex1 extends Thread{ public Ex1(String name){ super(name); } private int i=0; public void run(){ i++; ...

karute的博客 1735

多线程中实例变量的共享造成线程安全问题解决

多线程中实例变量的共享造成线程安全问题解决 1. 不共享数据情况 代码实例: //线程类 public class MyThread1 extends Thread{ private int count = 5; public MyThread1(String name){ setName(name); } @Override public void run() { while (count > 0){

CAUC_lin的博客 890

java 实例变量 共享_关于Runnable接口,多个线程共享一个target和实例变量的问题

publicclassSecondThreadimplementsRunnable{inti;@Overridepublicvoidrun(){for(;i<20;i++){System.out.println(Thread.currentThread().getName()+"-"+i);}}publicstaticvoidmain(String[]args){...

weixin_35531726的博客 432

struts中Action的线程安全与实例变量和静态变量的共享问题

Action必须用一种线程安全的方式来编程,因为Controller会为多个同步请求共享相同的实例。 1、Action中的实例变量和静态变量不能够用来存储与特定请求状态有关的信息。对于同一个Action的访问它可能用来共享全局资源。 2、对于其他资源的访问 (JavaBeans, session variables, etc.) 必须被同步...

SYL269794967的博客 232

java 多线程访问变量_Java多线程之间访问实例变量

自定义线程类中的实例变量针对其他线程可以有共享与不共享之分,这在多个线程之间进行交互时是很重要的一个技术点。图 1 所示为不共享数据的示例,图 2 所示为共享数据的示例。图1 线程之间不共享数据实例图图2 线程间共享数据示例图例 1如图 1 所示,在不共享数据时每个线程都拥有自己作用域的变量,且多个线程之间相同变量名的值也不相同。下面创建一个示例演示这种特性。首先创建自定义的线程类 MyThrea...

weixin_30146085的博客 1216

java 实例变量 共享_java – servlet如何工作?实例化,会话,共享变量和多线程

ServletContext当servlet容器(如Apache Tomcat)启动时,它将部署和加载其所有Web应用程序。加载Web应用程序时,servlet容器将创建一次ServletContext,并将其保留在服务器的内存中。 web应用的web.xml文件被解析,并且每个,和发现(或分别用@WebServlet,@WebFilter和@WebListener注释的类)被实例化一次,并保存在...

weixin_39818727的博客 126
上一篇: Thread : currentThread().getName()和getName()的区别
下一篇: 论前端做校验后服务器端是否还要做校验
yklovejava
博客等级 码龄14年 0粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值