黑马程序员技术交流社区

标题: 有没有大神解答一下 [打印本页]

作者: mrwalker    时间: 2017-3-19 17:51
标题: 有没有大神解答一下
[Java] 纯文本查看 复制代码
public class Demo01 {

        public static void main(String[] args) {
                new Tickets().start();
                new Tickets().start();
                new Tickets().start();
                new Tickets().start();
        }

}

class Tickets extends Thread {
        private static int tickets = 100;
        public void run() {
synchronized(Tickets.class) {
                while(true) {
                                if(tickets <= 0) {
                                        break;
                                }else {
                                        try {
                                                Thread.sleep(10);
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                        System.out.println(getName() + "---第" + tickets-- + "张票");
                                }
                        }
                }
        }
}


把synchronized(Tickets.class)放在while(true)前面的话,会默认只调用第一个进程,这是为什么?

作者: lvshen9    时间: 2017-3-19 20:11
都在循环外了,感觉没有用到

作者: Mr_Maty    时间: 2017-3-19 20:20
你把代码快都上锁了相当于整个方法上锁,相当于整个run只允许一个进程执行,相当于单线程,相当于。。。。。。。。

作者: mrwalker    时间: 2017-3-19 22:01
lvshen9 发表于 2017-3-19 20:11
都在循环外了,感觉没有用到

肯定用到了,没用到的话是另一种结果




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