在java线程同步中,被多线程共享的对象该对象的函数和属性都会共享,但是函数里面的局部变量是不同的,他们被分别存储在所属线程的数据空间里面。从内存角度来分析,共享对象的函数和属性,在不同的线程中,都是同一个内存单元,而函数中的局部变量,在线程执行的时候才会产生,每个线程都在所属的内存空间里申请一个内存单元。
public class MyThread extends Thread{
private SingleTon singleTon;
public void set(SingleTon singleTon){
this.singleTon = singleTon;
}
public void run(){
try {
singleTon.test();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args){
MyThread thread1 = new MyThread();
MyThread thread2 = new MyThread();
thread1.set(SingleTon.getInstance());
thread2.set(SingleTon.getInstance());
thread1.setName("thread1");
thread2.setName("thread2");
thread1.start();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
thread2.start();
}
}
public class SingleTon {
private static SingleTon singleTon=new SingleTon();
private static SingleTon classMember =singleTon;
public static SingleTon getInstance(){
if(singleTon == null)
singleTon = new SingleTon();
return singleTon;
}
public void test() throws InterruptedException{
SingleTon localMember =new SingleTon();
System.out.println(Thread.currentThread().getName()+" classMember = "+classMember);
System.out.println(Thread.currentThread().getName()+" localMember = "+localMember);
}
}
打印结果:
thread1 classMember = SingleTon@1fb8ee3
thread1 localMember = SingleTon@61de33
thread2 classMember = SingleTon@1fb8ee3
thread2 localMember = SingleTon@10b30a7
可以看到thread1,thread2中的classMember是一个内存单元,而localMember是不同的内存单元
分享到:
相关推荐
在Java编程环境中,...总之,使用Java线程实现数据库主从同步更新是一种常见且实用的技术手段,它涉及到多线程编程、数据库操作、事务管理等多个方面。理解和掌握这些知识点对于开发高可用性的分布式系统至关重要。
电子书相关:包含4个有关JAVA线程的电子书(几乎涵盖全部有关线程的书籍) OReilly.Java.Threads.3rd.Edition.Sep.2004.eBook-DDU Java Thread Programming (Sams) java线程第二版中英文 java线程第二版中英文 ...
在Java编程语言中,线程同步是一个关键概念,特别是在多线程编程中,它用于确保多个线程在访问共享资源时能正确协调,避免数据不一致性和竞态条件。五子棋游戏是一个典型的多线程应用场景,因为它涉及到两个玩家交替...
《Java线程 高清晰中文第二版》中文第二版(PDF) 前言 第一章 线程简介 Java术语 线程概述 为什么要使用线程? 总结 第二章 Java线程API 通过Thread类创建线程 使用Runable接口的线程 线程的生命周期 线程命名 ...
这些题目涵盖了 JAVA 多线程编程的基本概念和技术,包括线程的生命周期、线程同步、线程状态、线程优先级、线程安全等方面。 一、单项选择题 在单项选择题中,我们可以看到各种关于 JAVA 多线程编程的基本概念和...
- **线程同步**:由于线程共享同一个进程的资源,因此必须处理好线程间的同步问题,避免数据竞争和死锁。Java提供了多种同步机制,如`synchronized`关键字、`ReentrantLock`类和`Semaphore`等。 - **线程通信**:...
本文将深入探讨Java线程停止的方法,特别是通过一个示例代码片段来解析如何利用标志变量(Flag)控制线程的生命周期,以及这种方法背后的原理与最佳实践。 ### Java线程停止方法概述 在Java中,直接调用线程的`...
### Java多线程网络传输文件(非同步) #### 概述 在现代软件开发中,尤其是在涉及大量数据传输的应用场景下,高效的文件传输方案尤为重要。Java作为一种广泛应用的编程语言,提供了丰富的工具和技术来实现高性能...
Java提供了多种线程同步机制,如synchronized关键字、wait/notify机制、ReentrantLock等。在这个程序中,开发者可能会使用这些机制确保弹球的位置和速度更新是安全的。 其次,弹球的随机出现和随机选择颜色涉及到...
具体实现细节,可以通过链接中的博客文章(http://blog.csdn.net/u011315960/article/details/70209621)进一步了解,博客可能详细讲解了如何在实际的Android应用中设计和实现线程同步的Demo。 总之,理解并熟练...
Java线程调度策略遵循操作系统的线程调度机制,同时也提供了设置线程优先级的功能,但需要注意的是,线程的优先级仅作为提示性的信息,并不能完全保证线程的实际执行顺序。 #### 五、案例分析 假设我们需要开发一...
### 四种线程同步控制方法详解 #### 引言 在并发编程中,线程同步是至关重要的一环。为了防止多个线程间因...通过深入理解这些基本概念,开发者可以更好地掌握线程同步的技术细节,从而编写出更高效的并发应用程序。
Java线程API是Java编程语言中的一个重要组成部分,它允许开发者在一个程序中同时执行多个任务,提高了应用程序的效率和响应性。...通过深入阅读"Java线程.pdf"文档,可以进一步学习这些概念的细节和实践应用。
Java多线程设计模式是Java开发中的重要领域,它涉及到如何在并发环境下高效、安全地管理资源和控制程序执行流程。本资料集包含了清晰完整的PDF版书籍和源代码,为学习和理解Java多线程设计模式提供了丰富的素材。 ...
在"java线程学习一4"这个主题中,我们将会深入探讨Java中的多线程概念,以及如何通过源码理解和使用相关工具进行线程管理。 首先,我们需要理解Java中的线程创建方式。Java提供了两种主要的线程创建方法:继承...
### 最好的Java多线程电子书 #### 一、并发与多任务 - **并发**:指在同一时间段...通过本电子书的学习,读者可以深入理解Java多线程编程的核心概念和技术细节,为开发高性能和健壮的多线程应用程序打下坚实的基础。
4. **线程同步与死锁**:当多个线程访问共享资源时,为了避免数据不一致问题,需要使用同步机制。但同步不当可能会导致死锁,这是多个线程互相等待对方释放锁的情况。 5. **线程通信**:线程间的通信主要通过共享...
2. 线程同步和互斥 - 了解同步机制(synchronized)和锁(Lock)的使用,包括同步方法和同步块; - 防止线程安全问题,例如竞态条件(Race Condition); - 掌握死锁的概念和避免死锁的策略。 3. 线程间通信 - ...
1. **线程同步**:多线程操作同一文件时,必须注意线程之间的同步问题,避免数据冲突。可以使用`synchronized`关键字或者`ReentrantLock`等机制来控制对共享资源的访问。 2. **断点续传**:在下载过程中,如果遇到...
Java线程有10个优先级(1-10,`Thread.MIN_PRIORITY`到`Thread.MAX_PRIORITY`),但优先级对线程调度的影响并不总是明显,取决于JVM和操作系统。 7. **并发工具类**: `java.util.concurrent`包提供了丰富的并发...