黑马程序员技术交流社区
标题:
多线程代码运行的一个问题
[打印本页]
作者:
love~陌
时间:
2014-3-17 11:50
标题:
多线程代码运行的一个问题
class Ticket implements Runnable
{
private int tick = 1000;
Object obj = new Object();
public void run()
{
while(true)
{
synchronized(obj)
{
if(tick>0)
{
System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
}
}
}
}
}
class TicketDemo2
{
public static void main(String[] args)
{
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
复制代码
假设我的文件存储路径为
E:\code
在DOS命令行窗口下,应该这样子
E:\code>javac TicketDemo2.java
E:\code>java TicketDemo2
程序运行完毕,DOS命令行窗口应该会停留在
E:\code>
这里,等待我输入下一个指令
以前都是这样子的,但是现在我学习到多线程,运行代码的时候,
每次都需要我自己强制停止一次程序运行才会结束。
求解释。
TicketDemo2.png
(78.19 KB, 下载次数: 19)
下载附件
2014-3-17 11:49 上传
作者:
学习代码
时间:
2014-3-17 12:10
因为你在同步代码块上加上了while(true) 无限循环,当在循环到tick=0的时候就结束了 输出就结束了 但是还在循环
作者:
vtming
时间:
2014-3-17 12:12
while(true)此处是死循环 ,线程在一直运行。所以要强制停止
作者:
菜小徐
时间:
2014-3-17 12:13
while(true){}这是无限循环语句啊,你换个条件就行了
作者:
王竞
时间:
2014-3-17 13:24
亲,你在run里面用的是死循环的吗,当ticket减到0以后,线程一直都在循环的吗,
if(tick>0)
{
System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
}
else {
beak;//当票数减到0以后则退出循环
}
作者:
汗血黑马
时间:
2014-3-17 13:47
同楼上,你可以换一个循环语句,如:for(int i = 0; i<= 1000; i++)试试。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2