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