黑马程序员技术交流社区
标题:
在学习线程中,有一些地方不是很理解
[打印本页]
作者:
qingxi1
时间:
2014-8-7 15:14
标题:
在学习线程中,有一些地方不是很理解
在学习线程中,关于线程的创建的两种方法,线程开启等都会了,但是在一些程序中对于一些代码的理解不是很正确
class Ticket implements Runnable
{
private int tick = 1000;
Object obj = new Object();//为synchronized提供对象
public void run()
{
while(true)
{
synchronized(obj)
{
if(tick>0)
{
System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
}
}
}
}
}
和
class Ticket implements Runnable
{
private int tick = 1000;
Object obj = new Object();
boolean flag = true;
public void run()
{
if(flag)
{
while(true)
{
synchronized(obj)
{
show();
}
}
}
else
while(true)
show();
}
在这两个程序中关于while(true)的理解不是很清楚,还有这里面
有他们Object obj = new Object();
boolean flag = true;
有什么作用?
可以说一下下面这个程序中if(flag)的作用,他们简单的一些思路:比如flag为true会怎么样,等等
if(flag)
{
while(true)
{
synchronized(obj)
{
show();
}
}
}
else
while(true)
show()
作者:
暗夜星辰
时间:
2014-8-7 15:21
首先说一下while(true)这个问题吧,其实毕老师定义这个死循环是为了让我们更清晰看到现象,如果没定义这个死循环,线程只跑一次就停止了,没法看到现象。至于Object obj = new Object();楼主应该学习到锁了吧,这句话其实就是在 synchronized这个关键字中起作用,他的目的就是定义一个锁的对象而已,if(flag)这个,额,应该就是简单的if语法问题吧?如果为true就执行if的{}中的语句,如果为false则执行else的{}的语句。
作者:
rolling-stone
时间:
2014-8-7 17:08
while(true),就是让不断循环,这样才可以不断买票,那个obj是建立一个obj对象,这个对象当同步时候的锁,这个锁你不能直接用,必须确定一个对象再同。至于那个flag,你就记住了,这样定义就是想让这个循环必须运行.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2