2 qq 28503189 qq_28503189 于 2016.02.04 12:22 提问

java中简单的线程问题

我只创建了一个对象,为何运行的时候会有两个第五张票出现?即便是把上面的tickets变量加上static也是同样的结果

9个回答

u012875512
u012875512   2016.02.04 16:01

加不加static与是否会发生多线程冲突无关,你需要在执行代码处加个锁防止多个线程同时调用一个对象

NUC_White
NUC_White   2016.02.04 12:51

源代码发我一下,多线程就是指多个对象对某个RUN方法多次调用。

a510835147
a510835147   2016.02.04 13:15

线程同步问题吧。。。 最好贴个代码出来。

xionglangs
xionglangs   Rxr 2016.02.04 15:29

如果不想修改代码,也找不到错误,那么就在要执行逻辑代码之前去下重呗,虽然这样不合理。

paopaoTT
paopaoTT   2016.02.04 19:38

把源码弄出来看看,这样才有法给你看

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.04 20:04

据描述来推测,应该是你用多线程同时访问全局共享变量时,你没有作同步处理导致的数据不一致问题。建议你在访问这个变量的地方使用加锁处理,将代码放在同步代码块中,例如synchronized(某个类名.class){访问变量的代码}。

luochoudan
luochoudan   Ds   Rxr 2016.02.04 23:06

这问题问的,没图没代码怎么说?

u010001503
u010001503   2016.02.05 09:22

你这个应该是线程同步问题。 一个很经典的例子: a+=1 这个其实是三个动作:1.先从内存中取得a的值 2.执行a+1 3.将a+1的结果再赋值给a

多线程其实是不可控制的,当a=4 的时候, 线程1执行完a+1后还没将结果赋值给a 此时线程2 去读取a的值又再次执行a+1 那么此时两个线程的结果也就都是5了。 解决该问题可以通过加锁或者原子操作进行。 比如 synchronize(object){ a+=1;} 这样就可以把a+=1这个操作看成是只有一步的操作,
从而解决了上述问题。

91program
91program   Ds   Rxr 2016.02.04 12:55

还是直接将代码贴出来吧,你这样的问法别人真没有办法帮你。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!