黑马程序员技术交流社区
标题:
有兴趣的过来试试,看看发生了什么(卖票测试)
[打印本页]
作者:
Fozei
时间:
2015-9-1 21:11
标题:
有兴趣的过来试试,看看发生了什么(卖票测试)
本帖最后由 Fozei 于 2015-9-1 21:11 编辑
自学视频,看到了多线程那一部分了,模仿毕老师讲的卖票的小程序,大家请看:
class TicketsSelling
{
public static void main(String[] args)
{
tickets s1=new tickets("win---1");
tickets s2=new tickets("win---2");
tickets s3=new tickets("win---3");
tickets s4=new tickets("win---4");
s1.start();
s2.start();
s3.start();
s4.start();
}
}
class tickets extends Thread
{
private static int ticket=100;//定义一个static的变量存储票的张数,表示这个变量是公用的,四个窗口都可以用
private String win;
tickets(String win)
{
super(win);//调用父类的构造函数给Thread起一个名字(面向对象没学扎实,理解的可能不对)
}
public void run()//覆盖run方法
{
//保持while(true)循环不停(保持唤醒——自己的理解),经过试验,如果没有这个无线循环语句,只能卖出前四张票;改成while(ticket>0)更好
while(ticket>0)
{
if(ticket>0)//只要还有余票,就执行下面的语句,即:继续卖票
System.out.println(Thread.currentThread().getName()+" sells ticket "+ticket--);
}
}
}
复制代码
程序是可以运行的,也能实现需求功能。
我的疑问出现在这一句第32行:
System.out.println(Thread.currentThread().getName()
+" sells ticket "
+ticket--);
为什么把红字的部分,也就是“
+“sells ticket”
”这部分内容删掉的话,程序运行结果就不一样了?删掉之后运行出来的些数字是怎么运行出来的???希望热心的朋友能够答疑解惑一下,不胜感激额。
作者:
Fozei
时间:
2015-9-2 08:18
自己回一个,防止沉底,大家快快看看。
作者:
suichuan689
时间:
2015-9-2 08:50
“sells ticket”是字符串会原样输出的,你删掉的话它就不会输出了,但这并不影响程序的运行结果,之所以看起来程序的运行结果不一样,是因为Thread.currentThread().getName()获取的线程名称与余票数混合在了一起
作者:
Fozei
时间:
2015-9-2 09:49
suichuan689 发表于 2015-9-2 08:50
“sells ticket”是字符串会原样输出的,你删掉的话它就不会输出了,但这并不影响程序的运行结果,之所以看 ...
啊,仔细看了一下我的输出结果,还真是跟你说的一样,谢谢了,非常感谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2