A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在学习线程中,关于线程的创建的两种方法,线程开启等都会了,但是在一些程序中对于一些代码的理解不是很正确
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()

2 个回复

倒序浏览
首先说一下while(true)这个问题吧,其实毕老师定义这个死循环是为了让我们更清晰看到现象,如果没定义这个死循环,线程只跑一次就停止了,没法看到现象。至于Object obj = new Object();楼主应该学习到锁了吧,这句话其实就是在 synchronized这个关键字中起作用,他的目的就是定义一个锁的对象而已,if(flag)这个,额,应该就是简单的if语法问题吧?如果为true就执行if的{}中的语句,如果为false则执行else的{}的语句。
回复 使用道具 举报
while(true),就是让不断循环,这样才可以不断买票,那个obj是建立一个obj对象,这个对象当同步时候的锁,这个锁你不能直接用,必须确定一个对象再同。至于那个flag,你就记住了,这样定义就是想让这个循环必须运行.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马