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是不同的内存单元
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值