现在有两个线程,同时运行,如果调用同一实例里面的同一方法会出问题吗。
千万别把并发调用就当同步问题
,完全不是一个概念!
首先你搞清楚什么是生产者和消费者模型,也就是说如果没有并发的读和写
,也就不符合这个模型。
有一种典型的并发调用情况就是工具类。因为类在运行时会加载到class loader中,你只要给一个输入就会对应执行后给一个输出,所以整个过程类是不会有任何变化的。
有变化的只能是内存中对象!所以当你公用一个对象,而这个对象会通过类中的方法被多次的使用,一个线程去写,另外有线程去读就会出问题。
确实要搞清楚多线程编程问题的本质。题主可能就不会问这个问题了。
凭我自己的一点理解,首先要搞清楚你问的产生的问题是什么问题,楼上的大大也都说了,其实说白了线程会出现的问题是在数据同步的问题上,再通俗点便是:同时读和写,会出现我们想不到的问题。
那现在来说你问的这种情况,调用同一实例的同一个方法,其实抽象出来就算是读取同一个实例咯,按道理来说这应该是没问题的。接下来便是这个方法的内容了,这里边有没有数据同步的问题,这就不清楚了。
归根结底线程可能出现的问题都是对数据的操作,调用方法这些其实都不是出现问题的实质,也许只是表象而已。
我给你举个栗子吧:
零件是散乱无章的,但是一共可以组装1000台车,而且是按顺序的,组装队呢,一次就只能按需组装一个车,10个销售等着拿走去卖。
那就会有如下几个类和方法:
class parts{//汽车零件}
class carGenarator{//造车的{
//造车方法,synchronized确保谁要就给谁造,同步进行。保证顺序(假定这个顺序就是你的业务逻辑)。
Public synchronized Car AssembleCar(Parts parts){
}
}}
class salers{卖车的}
{
//10个销售不停的去拿车,卖车。
}
例子可能不太直观,仅供参考吧!
8 回答6.8k 阅读
4 回答1k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
2 回答646 阅读✓ 已解决
2 回答1.2k 阅读
2 回答1.5k 阅读
要看方法里具体是做什么了,多线程访问同一个对象要注意并发问题