/* * 同步方法:使用关键字synchronized修饰的方法,一旦被一个线程访问, * 则整个方法全部锁住,其他线程则无法访问 * * static void sleep(long millis) :让当前线程睡一会 * * synchronized:同步(锁),可以修饰代码块和方法,被修饰的代码块和方法一旦被某个线程访问,则直接锁住, * 其他的线程将无法访问 * * 同步代码块: * synchronized(锁对象){ * * } * * 注意: * 非静态同步方法的锁对象是this * 静态的同步方法的锁对象是当前类的字节码对象 * */ public class TicketThread implements Runnable{ static int tickets = 100; //火车票数量 /*Object obj = new Object();*/ @Override public void run() { //出售火车票 while(true) { /*synchronized (obj) { }*/ //method(); method2(); } } private synchronized void method() { //当火车小于0张停止售票 if(tickets > 0) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+":"+tickets--); } } private static synchronized void method2() { //当火车小于0张停止售票 if(tickets > 0) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+":"+tickets--); } } }
多线程案例:模拟火车站售票
猜你喜欢
转载自blog.csdn.net/ludadan/article/details/79947918
今日推荐
周排行