黑马程序员技术交流社区

标题: 毕老师视频 关于线程安全 [打印本页]

作者: 吹血弄花    时间: 2014-4-12 01:52
标题: 毕老师视频 关于线程安全
本帖最后由 吹血弄花 于 2014-4-12 20:49 编辑

class Ticket implements Runnable
{
        private static int tick=100;
        Object obj=new Object();
        public void run()
        {
                while(true)
                {
                        synchronized (obj)
                        {
                                if(tick>0)
                                {
                                try
                                        {
                                                Thread.sleep(10);
                                        }
                                        catch (Exception e)
                                        {
                                        }
                                        System.out.println(Thread.currentThread().getName()+"sale:"+tick--);
                                }
                        }
                }
        }
}
class  TicketDemo
{
        public static void main(String[] args)
        {
                Ticket t=new Ticket();
                Thread t1=new Thread(t);
                Thread t2=new Thread(t);
                Thread t3=new Thread(t);
                Thread t4=new Thread(t);
                /*
                Ticket t1=new Ticket();
                Ticket t2=new Ticket();
                Ticket t3=new Ticket();
                Ticket t4=new Ticket();*/
                t1.start();
                t2.start();
                t3.start();
                t4.start();
        }

}
照着教程一步步敲出来的,为什么我的只有0线程打印啊?教程中是4个线程都打印的。
作者: Tking    时间: 2014-4-12 02:13
这是个人电脑问题,你多尝试几次,就会看见并发了,并发存在很多因素,很难很好的掌控
作者: skyfly    时间: 2014-4-12 03:45
                t1.start();   修改成     t1.start();
                t2.start();                 t1.yield();
                t3.start();                  t2.start();
                t3.start();                  t3.start();
                 t4.start();                  t4.start();           
   由于线程是由CPU随机抢夺执行权的  所以你也可以多执行几次该程序   也能看到其他线程了
              
                t4.start();   
作者: 向日葵的曙光    时间: 2014-4-12 08:48
CUP会抢资源执行,抢夺的机会是随机的,多运行几次或许就能出线别的结果了,或者将Tickets的值取大一点1000或者10000
还可以让休眠的时间加长,改为1000
作者: 吹血弄花    时间: 2014-4-12 20:45
哦哦,我还以为是java版本差异,谢谢各位




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