package ticketDemo; class ticket implements Runnable{ private int count=100; public void run(){ while(count>0){ System.out.println(Thread.currentThread().getName()+"卖出票"+count--); } } } public class ticketDemo { public static void main(String[] args){ ticket t=new ticket(); Thread thread1=new Thread(t,"线程1"); Thread thread2=new Thread(t,"线程2"); thread1.start(); thread2.start(); } } 输出的一次结果:线程1卖出票100 线程1卖出票99 线程1卖出票98 线程1卖出票97 线程1卖出票96 线程2卖出票100 线程2卖出票94 线程2卖出票93 线程2卖出票92 线程2卖出票91 线程2卖出票90 线程2卖出票89 线程2卖出票88 线程2卖出票87 线程2卖出票86 线程2卖出票85 线程2卖出票84 线程2卖出票83 线程2卖出票82 线程2卖出票81 线程2卖出票80 线程2卖出票79 线程2卖出票78 线程2卖出票77 线程2卖出票76 线程2卖出票75 线程2卖出票74 线程2卖出票73 线程2卖出票72 线程2卖出票71 线程2卖出票70 出现2次售出100 我在想就算一个线程在system 那卡主了 ,当第二个线程执行一次count--输出100的时候那么就算第一个线程被唤醒count也会变成99不是,为什么会输出二个100呢? |
dddlinux 发表于 2015-8-31 17:02
Thread thread1=new Thread(t,"线程1"); Thread thread2=new Thread(t,"线程2");
111111111111111111111111111111111111.png (10.01 KB, 下载次数: 112)
dddlinux 发表于 2015-8-31 17:12
没写完,点错了,就发出去了,,这不能输出2个100吧, 因为你创建一个封装任务的对象啊,ticket t=new ti ...
liuch111 发表于 2015-8-31 17:56
很正常····
第五行本来因该是 96,但是你没有用同步 所以两个相互独立的线程同时执行syste ...
liuch111 发表于 2015-8-31 17:56
很正常····
第五行本来因该是 96,但是你没有用同步 所以两个相互独立的线程同时执行syste ...
liuch111 发表于 2015-8-31 20:16
eclipse 设置成单核试一下
liuch111 发表于 2015-8-31 20:16
eclipse 设置成单核试一下
freehello 发表于 2015-8-31 21:02
首先线程2拿到执行权,执行到了输出语句,由于count--,所以是先输出,再--,结果输出后,线程1得到了执行 ...
freehello 发表于 2015-9-1 13:03
不好意思,我是按我的输出分析的,抱歉。
为什么是线程2是100,因为System.out.println是一个函数,它挂起 ...
backin 发表于 2015-9-1 19:56
其实这个就是因为运算符优先级的问题。+count--的时候因为打印的优先级比运算的优先级要高,所以是先打印, ...
boboyuwu 发表于 2015-9-1 21:53
括起来问题照样出线
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |