java - 两个线程同时调用同一实例里面的同一方法会出问题吗?
高洛峰
高洛峰 2017-04-17 13:12:00
[Java讨论组]

现在有两个线程,同时运行,如果调用同一实例里面的同一方法会出问题吗。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(6)
黄舟

要看方法里具体是做什么了,多线程访问同一个对象要注意并发问题

巴扎黑

千万别把并发调用就当同步问题,完全不是一个概念!

首先你搞清楚什么是生产者和消费者模型,也就是说如果没有并发的读和写,也就不符合这个模型。

有一种典型的并发调用情况就是工具类。因为类在运行时会加载到class loader中,你只要给一个输入就会对应执行后给一个输出,所以整个过程类是不会有任何变化的。

有变化的只能是内存中对象!所以当你公用一个对象,而这个对象会通过类中的方法被多次的使用,一个线程去写,另外有线程去读就会出问题。

天蓬老师

确实要搞清楚多线程编程问题的本质。题主可能就不会问这个问题了。

凭我自己的一点理解,首先要搞清楚你问的产生的问题是什么问题,楼上的大大也都说了,其实说白了线程会出现的问题是在数据同步的问题上,再通俗点便是:同时读和写,会出现我们想不到的问题。

那现在来说你问的这种情况,调用同一实例的同一个方法,其实抽象出来就算是读取同一个实例咯,按道理来说这应该是没问题的。接下来便是这个方法的内容了,这里边有没有数据同步的问题,这就不清楚了。


归根结底线程可能出现的问题都是对数据的操作,调用方法这些其实都不是出现问题的实质,也许只是表象而已。

迷茫

正常情况下没什么问题,注意两点:
01.对同一变量访问的情况,建议对必要的内容加锁;
02.不知道函数有类似static等关键词时会有什么情况;
刚入门不久,这是一些建议。

伊谢尔伦

多线程操作如果要访问同一个资源,要注意死锁,同步的问题。

PHP中文网

我给你举个栗子吧:

  1. 汽车工厂有一堆零件(data);
  2. 汽车工厂有一个组装队伍(producer)
  3. 汽车工厂有10个销售(comsumers);

零件是散乱无章的,但是一共可以组装1000台车,而且是按顺序的,组装队呢,一次就只能按需组装一个车,10个销售等着拿走去卖。

那就会有如下几个类和方法:

class parts{//汽车零件}
class carGenarator{//造车的{
   //造车方法,synchronized确保谁要就给谁造,同步进行。保证顺序(假定这个顺序就是你的业务逻辑)。
   Public synchronized Car AssembleCar(Parts parts){
   }
}}
class salers{卖车的}
{
//10个销售不停的去拿车,卖车。
}

例子可能不太直观,仅供参考吧!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号