黑马程序员技术交流社区

标题: 多线程 同步问题 [打印本页]

作者: 袁野    时间: 2012-1-15 20:45
标题: 多线程 同步问题
本帖最后由 袁野 于 2012-1-16 00:37 编辑

public class Demo0400
{
        public static void main(String[] args)
        {
                Text0400 t = new Text0400();
                Thread th1 = new Thread(t, "1111");
                Thread th2 = new Thread(t, "2222");
                th1.start();
                th2.start();
        }
};

class Text0400 implements Runnable
{
        private int        tick        = 100;
        Object obj = new Object();

        public void run()
        {
                while (true)// 求这行代码的作用 ?
                {
                        synchronized (obj) //为什么需要上面加个while (true) ;
                       
                        {
                                if (tick > 0)
                                {
                                        try
                                        {
                                                Thread.sleep(100);
                                        }
                                        catch (InterruptedException e)
                                        {
                                                e.printStackTrace();
                                        }
                                        System.out.println(Thread.currentThread().getName()
                                                        + "tick" + tick--);
                                }
                        }
                }
        }
};

while(true)的作用?
作者: 黄秋    时间: 2012-1-15 22:02
while(true),不断循环,如无退出就是死循环了。while,当条件真时循环,由于永远是true,所以不断循环。
作者: 彭嘉聪    时间: 2012-1-15 22:12
这个奇怪了,死循环,可能是用来演示线程执行的优先的顺序,所有没有定义标记退出把,
一边用 boolean flag ;while(flag){程序段} 当if(tick <=0的时候)设flag为false
作者: 黄秋    时间: 2012-1-16 01:31
"有while 运行的是俩线程 没while 运行是一个线程",并不是这样,new Thread--start();就运行一线程。
"即使不加上while也该是俩线程相互抢夺cpu",是的。
将代码“ if (tick > 0)”取消,while(true) 改为:while (tick > 0),这样易理解些。

作者: 任奇    时间: 2012-1-16 15:46
System.out.println(Thread.currentThread().getName()+ "tick" + tick--);

如果不加while(true)这票只卖一次,这100张票还能卖的完吗?
“即使不加上while也该是俩线程相互抢夺cpu啊 为什么我想的是错误的 纠结在这”
至于这个问题,毕老师只是为了更容易的看出两个线程在抢占资源,才能体现出抢占资源存在的危害。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2