public void run() { //锁不能写在while判断句之外,因为一旦这么写的话,一个线程进去后就会一直执行while语句, // 直至票卖完才会出来,这样相当于废掉了其它的线程 while(ticket<=100){ //以Thread的类本身当作锁,可以确保锁的唯一 synchronized(Thread.class){ try { sleep(20); } catch (InterruptedException e) { throw new RuntimeException(e); } if(ticket<=100) { System.out.println(currentThread().getName() + "sale" + ticket); ticket++; break; } } }该方法的break为何会将线程结束
时间: 2024-02-10 08:19:37 浏览: 53
在这个代码中,while循环是用来检查票是否卖完,如果票没卖完,就会执行下面的代码块。在这个代码块中,使用了synchronized关键字来确保在同一时间只有一个线程能够进入代码块,并且对ticket进行操作。如果在这段时间内,ticket的值等于或者小于100,那么就会输出当前线程的名称和售票的编号,然后将ticket的值加1,最后使用break语句来结束当前线程的运行。
使用break语句来结束当前线程的运行是因为当前线程已经完成了它的任务,即售出了一张票。使用break语句可以使当前线程跳出while循环,结束它的运行,同时也可以让其它线程有机会进入代码块并售出剩余的票。如果没有使用break语句,那么当前线程会一直循环并尝试售出票,直到票售完为止,这样会浪费时间和资源。
阅读全文