`
加菲学Java
  • 浏览: 132560 次
  • 性别: 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#多线程互斥实例 多线程获取同一变量

    在这个"多线程互斥实例 多线程获取同一变量"的示例中,我们将探讨如何在多个线程中安全地访问共享资源,避免数据不一致性和竞态条件。 首先,我们需要理解多线程中的一些核心概念: 1. **线程**:线程是操作系统...

    CVI 线程锁、线程安全变量实例

    本实例将深入探讨如何在LabWindows/CVI中有效地使用线程锁和线程安全变量来实现多线程程序设计。 首先,我们来看线程锁。线程锁,也称为互斥锁,是一种同步机制,用于确保同一时间只有一个线程可以访问特定的资源或...

    java多线程_java多线程下变量共享_

    在Java中,线程共享变量可以通过两种方式实现:静态成员变量和实例成员变量。静态成员属于类,所有该类的实例都可以访问,因此在多线程环境下默认共享;实例成员变量则属于对象,每个线程都有自己独立的副本,除非...

    多线程线程变量赋值

    当多个线程共享同一资源时,数据同步和安全问题就会变得至关重要。本话题聚焦于“多线程线程变量赋值”,讨论如何在不通过参数传递的情况下,为线程变量直接赋值。 首先,我们需要理解线程变量(Thread Local ...

    Linux下C语言多线程编程实例

    在每个线程函数中,我们首先输出当前线程的信息,然后使用互斥锁 `pthread_mutex_lock` 和 `pthread_mutex_unlock` 来保护共享变量 `number`,防止线程之间的竞争。最后,我们使用 `pthread_exit` 函数来结束线程的...

    java 多线程并发实例

    - volatile:修饰变量,确保多线程环境下的可见性和有序性,但不保证原子性。在实例中,可能用于共享标志的设置与读取。 - wait()、notify()和notifyAll():这些方法存在于Object类中,用于线程间的通信。在线程A...

    vc多线程编程实例

    3. **线程通信**:线程间通信是多线程编程的重要方面,可以使用`WaitForSingleObject`、`WaitForMultipleObjects`等函数,或者C++11引入的条件变量(`std::condition_variable`)来实现。 4. **线程局部存储**:在...

    Java多线程编程实例

    这两种方式各有优缺点,继承Thread类方便直接访问线程自身的属性,而实现Runnable接口则更利于代码的复用和多线程共享资源。 在Java中,我们还可以使用ExecutorService、ThreadPoolExecutor和Future等高级API来管理...

    VC单线程编程实例

    6. **线程局部存储(TLS)**: 在单线程程序中,全局变量是所有代码共享的。但如果需要每个线程拥有独立的数据,可以使用线程局部存储,这样每个线程都可以安全地访问其专属的数据。 在"VC单线程编程实例"中,可能还...

    多线程代码实例

    本文将详细解析"多线程代码实例",主要关注在Linux环境中,使用C语言实现的生产消费管理系统,以及如何利用POSIX线程库(pthread)中的互斥量和条件变量来管理共享资源。 首先,我们了解多线程的基本概念。多线程是...

    C# 多线程实例多线程实例多线程实例

    对于静态成员、全局变量和共享对象,必须确保它们在多线程环境中的访问是安全的。使用`volatile`关键字、`Interlocked`类或其他同步机制可以帮助实现线程安全。 8. Task并行库(TPL): .NET Framework 4.0引入了...

    多线程编程实例适合网络编程人员

    多线程编程允许开发者创建并行运行的任务,这些任务可以共享内存空间,包括变量、对象等资源,但每个线程都有自己的独立执行流。这在处理网络请求时非常有用,因为服务器通常需要同时处理多个客户端的并发连接。 在...

    VC++多线程编程 实例及讲解

    2. 线程局部存储:使用 TLS(Thread Local Storage)可以为每个线程分配独立的数据存储空间,避免共享资源的冲突。 五、线程优先级与调度 1. 线程优先级:Windows系统允许设置线程的优先级,以影响调度策略。但过多...

    linux下C语言多线程编程实例

    多线程是指在一个进程中创建多个执行流,每个线程都有自己的栈空间,共享进程的全局变量和打开的文件描述符。线程间通信和同步是多线程编程中的关键问题,防止数据竞争和死锁是实现高效并发的关键。 二、pthread库...

    C语言多线程编程实例.pdf

    4. 使用互斥锁pthread_mutex来保护共享资源,实现线程同步。 5. 如何初始化互斥锁pthread_mutex_init。 6. 使用sleep函数来模拟线程执行中的延时操作。 从提供的PDF内容中可以看到,有一个C语言源代码文件名为...

    java多线程编程实例_Source

    实例中可能涵盖常见线程安全问题,如数据竞争、死锁、活锁和饥饿,以及如何通过使用volatile、Atomic变量、线程局部变量(ThreadLocal)等手段来解决这些问题。 六、线程中断与异常处理 Java的Thread类提供了...

    《Java多线程编程实例》随书源码

    - `volatile`关键字:确保对变量的修改对所有线程可见,避免出现数据不一致的情况。 - `Lock`接口和`ReentrantLock`类:提供比`synchronized`更细粒度的锁控制,支持公平锁、非公平锁、可重入、可中断等特性。 3....

    java多线程编程实例 (源程序)

    - volatile关键字:用于确保共享变量的可见性和有序性,但不保证原子性。 - Lock接口:提供了更灵活的线程同步机制,如ReentrantLock,可以实现公平锁、非公平锁、可重入锁等功能。 5. **线程通信** - wait(), ...

    c++多线程代码实例

    C++多线程代码实例 在本文中,我们将探讨 C++ 中的多线程编程,实现线程同步互斥问题。通过使用 C++ 语言,我们可以创建多个线程,并使用互斥锁来实现线程同步。 多线程编程基本概念 在 C++ 中,多线程编程是通过...

    Visual C++多线程编程实例及讲解.

    另外,条件变量(`std::condition_variable`)在多线程编程中也扮演着重要角色。它们允许线程等待某个条件满足后再继续执行,通常与互斥量配合使用,提供了一种高效的通知机制。 线程间的通信还可以通过共享内存、...

Global site tag (gtag.js) - Google Analytics