线程同步的基本概念

首先,建议楼主先抛开高层的概念,了解一下最基本的东西。
类是什么?类就是一堆抽象的代码,我们人类的概念,计算机不管;
对象是什么?对象就是一块内存,计算机仅仅认为它是一块内存;
单例是什么?单例就是仅仅有一块这样的内存,别的地方没有同样的;
线程是什么?线程就是一个过程,拥有一个跑起来的环境(堆栈....);
并发是什么?并发就是多个过程(线程)进展的逻辑时间没有关系(姑且先不管与并行的区别);
同步是什么?同步就是多个过程进展的逻辑时间的严格顺序性。
明白了以上的概念以后,我们来看看你的问题:
1.两个线程是否同步呢?实际上两个线程在没有显式同步的情况下就是不同步的,那么是否会引起并发问题呢?答案是如果你的单例里面没有成员变量就不会有问题,因为那个单例没有成员变量就剩下了一堆方法,而方法是在代码段里面的,进一步,线程拥有自己的堆栈,所有方法调用都在自己堆栈上进行,数据都是自己通过参数提供的,肯定在自己的存储空间(局部变量在堆栈,全局变量共享,靠线程安全解决),操作自己的堆栈别人管的着吗?但是,如果你的单例有成员变量,那么,操作成员变量就不是在自己的堆栈了,而是在单例的存储区,因此会有多个线程同时操作,从而引起问题。
2.为何两个线程都可以得到单例的对象呢?实际上,看了上面的分析以后,单例只不过是一块内存而已,底层的操作全是指针操作(java里没指针,但jvm还是c实现的,根本操作还是指针),不同的线程获得同一个指针难道有何问题吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值