public class Text { public static void main(String[] args) { TicketOfficeText off= new TicketOfficeText(); Thread t1 = new Thread(off); t1.setName("售票点1"); t1.start(); Thread t2 = new Thread(off); t2.setName("售票点2"); t2.start(); Thread t3 = new Thread(off); t3.setName("售票点3"); t3.start(); Thread t4 = new Thread(off); t4.setName("售票点4"); t4.start(); Thread t5 = new Thread(off); t5.setName("售票点5"); t5.start(); } } class TicketOfficeText implements Runnable{ private int tickets=0; @Override public void run() { // TODO Auto-generated method stub boolean flag =true; while(flag) { flag=sell(); } } //synchronized主要的应用与同步代码快和同步方法; //下面是同步了整个方法, //synchronized,保证该方法在执行完毕前不会被另一个线程打断 //这种运行机制叫作同步线程机制。就是同一张票只能被一个售票点卖出 /*public synchronized boolean sell() { // TODO Auto-generated method stub boolean flag =true; if(tickets<100) { tickets+=1; System.out.println(Thread.currentThread().getName()+":卖出去第:"+tickets+"张票"); }else { flag =false; } try { Thread.sleep(15); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return flag; }*/ //下面是同步代码块,只是同步了会操作到共享数据的代码, //比同步整个方法会更有效率 public boolean sell() { // TODO Auto-generated method stub boolean flag =true; synchronized (this) { if(tickets<100) { tickets+=1; System.out.println(Thread.currentThread().getName()+":卖出去第:"+tickets+"张票"); }else { flag =false; } } try { Thread.sleep(15); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return flag; } }
线程同步的方法实现售票
最新推荐文章于 2021-05-05 22:24:43 发布