黑马程序员技术交流社区

标题: 在学习线程中,有一些地方不是很理解 [打印本页]

作者: 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