线程同步的方法实现售票

来源:互联网 发布:网络热传新郎被伴娘轮 编辑:程序博客网 时间:2024/06/07 09:12
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;@Overridepublic void run() {// TODO Auto-generated method stubboolean flag =true;while(flag){flag=sell();}}//synchronized主要的应用与同步代码快和同步方法;//下面是同步了整个方法,//synchronized,保证该方法在执行完毕前不会被另一个线程打断//这种运行机制叫作同步线程机制。就是同一张票只能被一个售票点卖出/*public  synchronized boolean sell() {// TODO Auto-generated method stubboolean 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 blocke.printStackTrace();}return flag;}*///下面是同步代码块,只是同步了会操作到共享数据的代码,//比同步整个方法会更有效率public   boolean sell() {// TODO Auto-generated method stubboolean 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 blocke.printStackTrace();}return flag;}}
原创粉丝点击