其实这个运行结果应该是不确定的,不信你可以多试几次,运行的不一定每一次都一样,因为谁也无法确定是accountant还是cashier运行的快,跟很多因素都有关系。
解决方案 »
- java中有类似C#里ref或out的功能吗?
- 怎么把零散的年、月、日变量赋值给date对象。
- 初学碰到的问题:“import Java.awt.*" 找不到
- Java中的并发性能问题 -- 请教了解Java运行机制的高手!
- java部署的问题,谁有相关经验,帮我解答下
- 最大公约数的问题
- 哪儿能得到JAVA的API参考手册(电子版),最好是中文的!
- java io 问题
- 求:串口全双工程序(有偿服务)
- 请问高手,如何知道一个insert语句执行是否成功呢?
- Java OutOfMemoryError
- 救命啊!昨天csdn整理数据时把我前几天发的丢了,可是我的问题还没解决!java制作柱形图!!!
把 update 声明为 synchronized 试试
money = 100+30;
Thread.sleep(1000);//accountant
money = 130-15;
Thread.sleep(1000);//cashier
j ++;
text1.append("\n" + String.valueOf(j) + ". " + money);
j ++;
text2.append("\n" + String.valueOf(j) + ". " + money);以后每轮都依照此顺序进行,所以每次结果加15。造成这种现象的根本原因是线程少,而sleep的时间长,
你可以多开几个线程,sleep并把时间设为1。
我不明白为什么会有3×5=15个数字?
for (int i=1;i<=3 ;i++ )
{
update(30);
}
每执行一次update(30)为什么会有5个数字输出?我觉得应该是3个或2个。
Thread cashier 为3×2=6个。
没错啊.
accountant线程执行完一次update(30)后,当前的线程不还是accountant吗,那么此线程应该紧接着执行第二、三次循环,然后才轮到cashier?