扫码关注官方订阅号
现在有两个线程,同时运行,如果调用同一实例里面的同一方法会出问题吗。
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
要看方法里具体是做什么了,多线程访问同一个对象要注意并发问题
千万别把并发调用就当同步问题,完全不是一个概念!
千万别把并发调用就当同步问题
首先你搞清楚什么是生产者和消费者模型,也就是说如果没有并发的读和写,也就不符合这个模型。
并发的读和写
有一种典型的并发调用情况就是工具类。因为类在运行时会加载到class loader中,你只要给一个输入就会对应执行后给一个输出,所以整个过程类是不会有任何变化的。
有变化的只能是内存中对象!所以当你公用一个对象,而这个对象会通过类中的方法被多次的使用,一个线程去写,另外有线程去读就会出问题。
确实要搞清楚多线程编程问题的本质。题主可能就不会问这个问题了。
凭我自己的一点理解,首先要搞清楚你问的产生的问题是什么问题,楼上的大大也都说了,其实说白了线程会出现的问题是在数据同步的问题上,再通俗点便是:同时读和写,会出现我们想不到的问题。
那现在来说你问的这种情况,调用同一实例的同一个方法,其实抽象出来就算是读取同一个实例咯,按道理来说这应该是没问题的。接下来便是这个方法的内容了,这里边有没有数据同步的问题,这就不清楚了。
归根结底线程可能出现的问题都是对数据的操作,调用方法这些其实都不是出现问题的实质,也许只是表象而已。
正常情况下没什么问题,注意两点: 01.对同一变量访问的情况,建议对必要的内容加锁; 02.不知道函数有类似static等关键词时会有什么情况; 刚入门不久,这是一些建议。
多线程操作如果要访问同一个资源,要注意死锁,同步的问题。
我给你举个栗子吧:
零件是散乱无章的,但是一共可以组装1000台车,而且是按顺序的,组装队呢,一次就只能按需组装一个车,10个销售等着拿走去卖。
那就会有如下几个类和方法:
class parts{//汽车零件} class carGenarator{//造车的{ //造车方法,synchronized确保谁要就给谁造,同步进行。保证顺序(假定这个顺序就是你的业务逻辑)。 Public synchronized Car AssembleCar(Parts parts){ } }} class salers{卖车的} { //10个销售不停的去拿车,卖车。 }
例子可能不太直观,仅供参考吧!
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
要看方法里具体是做什么了,多线程访问同一个对象要注意并发问题
千万别把并发调用就当同步问题,完全不是一个概念!首先你搞清楚什么是生产者和消费者模型,也就是说如果没有
并发的读和写,也就不符合这个模型。有一种典型的并发调用情况就是工具类。因为类在运行时会加载到class loader中,你只要给一个输入就会对应执行后给一个输出,所以整个过程类是不会有任何变化的。
有变化的只能是内存中对象!所以当你公用一个对象,而这个对象会通过类中的方法被多次的使用,一个线程去写,另外有线程去读就会出问题。
确实要搞清楚多线程编程问题的本质。题主可能就不会问这个问题了。
凭我自己的一点理解,首先要搞清楚你问的产生的问题是什么问题,楼上的大大也都说了,其实说白了线程会出现的问题是在数据同步的问题上,再通俗点便是:同时读和写,会出现我们想不到的问题。
那现在来说你问的这种情况,调用同一实例的同一个方法,其实抽象出来就算是读取同一个实例咯,按道理来说这应该是没问题的。接下来便是这个方法的内容了,这里边有没有数据同步的问题,这就不清楚了。
归根结底线程可能出现的问题都是对数据的操作,调用方法这些其实都不是出现问题的实质,也许只是表象而已。
正常情况下没什么问题,注意两点:
01.对同一变量访问的情况,建议对必要的内容加锁;
02.不知道函数有类似static等关键词时会有什么情况;
刚入门不久,这是一些建议。
多线程操作如果要访问同一个资源,要注意死锁,同步的问题。
我给你举个栗子吧:
零件是散乱无章的,但是一共可以组装1000台车,而且是按顺序的,组装队呢,一次就只能按需组装一个车,10个销售等着拿走去卖。
那就会有如下几个类和方法:
例子可能不太直观,仅供参考吧!