`
加菲学Java
  • 浏览: 131207 次
  • 性别: Icon_minigender_1
  • 来自: 扬州
社区版块
存档分类
最新评论

线程共享实例变量

阅读更多


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的值相等


 

  • 大小: 19.1 KB
分享到:
评论

相关推荐

    C#多线程互斥实例 多线程获取同一变量

    C#多线程互斥实例 多线程获取同一变量(不重复)。是一个很好的学习例子

    多线程代码实例

    生产消费管理系统,采用多线程实现。在程序整个运行过程中,存在1个控制线程、1个生产者线程、以及若干个消费者线程。使用POSIX标准的互斥量、条件变量等进行共享资源的保护。

    Java多线程编程之ThreadLocal线程范围内的共享变量

    主要介绍了Java多线程编程之ThreadLocal线程范围内的共享变量,本文讲解了ThreadLocal的作用和目的、ThreadLocal的应用场景、ThreadLocal的使用实例等,需要的朋友可以参考下

    多线程不同步读写共享资源代码

    多线程不同步读写共享资源 文章配套代码 我在很早的时候就听说多线程不同步是可以读写共享资源的。这听起来感觉挺好,因为一旦同步线程,将在同步线程上花去一定的CPU时间片. 这一切都是真的,但是,不同步线程的...

    python通过配置文件共享全局变量的实例

    今天小编就为大家分享一篇python通过配置文件共享全局变量的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    python使用锁访问共享变量实例解析

    当一个线程取得锁时,它变获得了共享变量的访问权,此时进入阻塞状态,若其它线程申请访问这个变量,则必须等到这个线程调用release方法释放这个锁。下面是python中使用锁的实例: #!/usr/bin/env python import ...

    使用redis分布式锁解决并发线程资源共享问题

    众所周知, 在多线程中,因为共享全局变量,会导致资源修改结果不一致,所以需要加锁来解决这个问题,保证同一时间只有一个线程对资源进行操作 但是在分布式架构中,我们的服务可能会有n个实例,但线程锁只对同一个...

    深入多线程之:深入分析Interlocked

    在大多数计算机上,增加变量操作不是一个...Interlocked可以为多个线程共享的变量提供原子操作。  Interlocked.Increment:以原子操作的形式递增指定变量的值并存储结果。 Interlocked.Decrement以原子操作的形式递减

    Python Threading 线程/互斥锁/死锁/GIL锁

    导入线程包 import threading 准备函数线程,传参数 ...线程共享全面变量,但在共享全局变量时会出现数据错误问题 使用 threading 模块中的 Lock 类,添加互斥锁可以解决线程共享全局变量问题 # 创建锁 mutex = t

    易语言-多进程数据共享例程 [Mutex] [Semaphore]

    适用场景: 其它进程 需 读取 宿主进程的某些数据。 由于其它原因,不想用 窗口消息/文件映射/socket 等进行跨进程通信,所以写了本例子,用的信号量及互斥体进行操作。 信号量可传递4/8/12字节数据。...

    Linux C 多线程编程之互斥锁与条件变量实例详解

    互斥量从本质上说就是一把锁, 提供对共享资源的保护访问。 1. 初始化: 在Linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化: 对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_...

    java学习多线程处理

    线程与父进程的其他线程共享进程所有的全部资源。 独立运行,采用独占方式。 一个线程可以创建和删除另外一个线程。 同一个进程中的多个线程之间可以并发执行。 线程的调度管理是由进程来完成的。 注意:编程...

    ado连接池实例

    同一进程的所有线程共享同一地址空间,可以访问进程的全局变量。线程通过以下工作改善应用的性能:管理多通信设备的输入。  区分任务的优先级。优先级高的处理紧急的任务。优先级低的处理其他任务。  以下是使用...

    Tjcug#JavaBasciLearing#Java基础:由JVM内存模型详解线程安全1

    1.前言最近在研究JVM内存模型和Java基础知识。主要讲的是线程共享变量与线程私有变量以及如何写出线程安全的代码。这里列出一条规则,“类中的成员变量,也叫实例

    《深入理解JAVA内存模型》PDF

    在java中,所有实例域、静态域和数组元素存储在堆内存中,堆内存在线程之间共享(本文使用“共享变量”这个术语代指实例域,静态域和数组元素)。局部变量(Local variables),方法定义参数(java语言规范称之为...

    实例讲解Java并发编程之变量

    主要介绍了实例讲解Java并发编程之变量,本文讲解了编写线程安全需要关心的共享变量和可变变量,需要的朋友可以参考下

    java7源码-scn:《疯狂Java讲义》学习

    实现Runnable接口创建线程类(共享线程类的实例变量)、 使用Callable和Future创建线程 控制线程:join线程、后台线程、线程睡眠(sleep)、线程让步(yield)、改变线程优先级 同步代码块,同步方法synchronized 同步锁:...

    Java并发学习-AtomicIntegerFieldUpdater字段原子更新类.docx

    只能是实例变量,不能是类变量,也就是说不能加static关键字。 只能是可修改变量,不能使final变量,因为final的语义就是不可修改。 对于AtomicIntegerFieldUpdater和AtomicLongFieldUpdater只能修改int/long...

    Java抢火车票程序源码-multithread:多线程

    Java抢火车票程序源码 一、Java多线程技术 技术要点 线程的启动 如何使线程暂停 如何使线程停止 线程的优先级 线程安全相关问题 ...自定义线程类中的实例变量针对其他线程可以有共享与不共享之分,也是多

    c#.net多线程编程教学——线程同步

    随着对多线程学习的深入,你可能觉得需要了解一些有关线程共享资源的问题. .NET framework提供了很多的类和数据类型来控制对共享资源的访问。 考虑一种我们经常遇到的情况:有一些全局变量和共享的类变量,我们需要...

Global site tag (gtag.js) - Google Analytics