`

java线程同步细节

 
阅读更多

在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线程 java线程第3版 java线程第2版第3版合集

    电子书相关:包含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多线程初学者指南,共12篇文档,由浅入深,举例说明,包括一些疑点都解释得很清楚,类,方法,属性同步的区别等细节也都介绍得很全面,是个很好的学习资料。

    java_各个Map的区别

    java_各个Map的区别 ConcurrentHashMap 支持检索的完全并发和更新的所期望可调整并发的哈希表。(线程安全)此类遵守与 ...此类可以通过程序完全与 Hashtable 进行互操作,这取决于其线程安全,而与其同步细节无关。

    Java Core Sprout:基础、并发、算法

    Java多线程 多线程中的常见问题 同步关键字原理 多线程的三大核心 对锁的一些认知 ReentrantLock实现原理 ConcurrentHashMap 的实现原理 如何优雅地使用和理解线程池 深入理解线程通信 一个线程召集的诡异事件 ...

    java中的锁.xmind

    1.同步器的主要使用方式是继承,子类通过继承同步器并实现他的抽象方法来管理同步状态(CAS线程安全操作) 2.子类通常定义为自定义同步组件的静态内部类 3.同步器是面向锁的实现者,他简化了锁的实现方式,屏蔽了...

    张孝祥Java就业培训教程.pdf

    内容简介 本书主要是冲着实际应用而来的,共分11章。...10.6 关于Java的一些细节 10.7 验证Applet对象在客户端如何存在 第11章 网络编程 11.1 网络编程的基础知识 11.2 Java编写UDP网络程序 11.3 Java编写TCP网络程序

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    第20章 线程同步 20.1 监视器 20.2 对象锁 20.3 指令集中对同步的支持 20.3.1 同步语句 20.3.2 同步方法 20.4 object类中的协调支持 20.5 随书光盘 20.6 资源页 附录a 按操作码助记符排列的指令...

    JAVA基础课程讲义

    线程同步和死锁问题 175 死锁及解决方案 179 生产者/消费者模式 181 线程回顾总结 184 任务调度(补充内容,了解即可!) 184 思考作业 185 上机作业 185 第十章 网络编程 186 基本概念 186 什么是计算机网络 186 ...

    深入java虚拟机中文第2版

    本书共分20章,第1-4章解释了Java虚拟机...第21章 线程同步 附录A 按操作码助记符排列的指令集 附录B 按功能排列的操作码助记符 附录C 按操作码字节值排列的操作码助记符 附录D Java虚拟机的一个模拟:“Slices of Pi”

    JAVA面试题最全集

    多线程,用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? 59.使用socket建立客户端与服务器的通信的过程 60.JAVA语言国际化应用,Locale类,Unicode 61.描述反射机制的作用 62.如何读写一个...

    Java性能优化的50个细节(珍藏版)

    1.尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:第一,控制资源的使用,通过线程同步来控制资源的...

    java 面试题 总结

    最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概...

    fileSync(java).rar_filesync_filesync java_java file sync _round

    由于考虑到实现方法上的局限(采用线程递归轮循扫描的方式),我仅仅是实现了这个功能,其它细节都未处理,有兴趣的可以自己去改进。局限:对于上百、上千的文件同步速度可以接受,但是如果同步数量上十万、百万,问题...

    awaitility, Awaitility是一个用于同步异步操作的小型 Java DSL.zip

    awaitility, Awaitility是一个用于同步异步操作的小型 Java DSL 测试异步系统是困难的。 它不仅需要处理线程。超时和并发问题,而且测试代码的意图可能会被所有这些细节所掩盖。 Awaitility是一个 DSL,允许你以简洁...

    免费开源!!Java Core Sprout:基础、并发、算法

    Java多线程 多线程中的常见问题 同步关键字原理 多线程的三大核心 对锁的一些认知 ReentrantLock实现原理 ConcurrentHashMap 的实现原理 如何优雅地使用和理解线程池 深入理解线程通信 一个线程召集的诡异事件 ...

    RPC-client异步收发核心细节

    异步回调和同步回调相比,除了序列化组件和连接池组件,会多出上下文管理器,超时管理器,下游收发队列,下游收发线程等组件,并且对调用方的调用习惯有影响(同步->回调)。异步回调能提高系统整体的吞吐量,具体...

    单例双检锁

    和多线程一起使用时,必需使用某种类型的同步。在努力创建更有效的代码时,Java 程序员们创建了双重检查锁定习语,将其和单例创建模式一起使用,从而限制同步代码量。然而,由于一些不太常见的 Java 内存模型细节的...

    深入理解Java源码:提升技术功底,深度掌握技术框架,快速定位线上问题

    无锁串行化设计思想是一种无锁串行化的设计思想,它通过串行化设计,即消息的处理尽可能在同一个线程内完成,期间不进行线程切换,这样就避免了多线程竞争和同步锁。直接内存的使用可以避免内存的二次拷贝,提高性能...

    AIC的Java课程1-6章

     理解和应用Java异常,常用类,IO,集合和多线程等开发技术。  课时安排  总学时:52学时  授课:48学时 (含约20学时实验)  考试:4学时  预备知识  了解和使用操作系统,...

Global site tag (gtag.js) - Google Analytics