线程同步问题,线程上锁---多线程“卖票”实例

线程1执行,其它三个上锁。

 

package demo; public class SellTickets implements Runnable{ private int tickets=100; public void run() { int count=0; while (true) { //上锁 synchronized(this){ if (tickets>0){ try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } count=100-tickets; System.out.println("当前票数是:"+tickets+"售出"+count +"线程名:"+Thread.currentThread().getName()); tickets--; }else{ break; } } } } public static void main(String[] args) { SellTickets r=new SellTickets(); Thread t1=new Thread(r,"t1"); t1.start(); Thread t2=new Thread(r,"t2"); t2.start(); Thread t3=new Thread(r,"t3"); t3.start(); Thread t4=new Thread(r,"t4"); t4.start(); } }

程序运行结果:

当前票数是:100售出0线程名:t1
当前票数是:99售出1线程名:t2
当前票数是:98售出2线程名:t3
当前票数是:97售出3线程名:t4
当前票数是:96售出4线程名:t1
当前票数是:95售出5线程名:t2
当前票数是:94售出6线程名:t3
当前票数是:93售出7线程名:t4
当前票数是:92售出8线程名:t1
当前票数是:91售出9线程名:t2
当前票数是:90售出10线程名:t3
当前票数是:89售出11线程名:t4
当前票数是:88售出12线程名:t1
当前票数是:87售出13线程名:t2
当前票数是:86售出14线程名:t3
当前票数是:85售出15线程名:t4
当前票数是:84售出16线程名:t1
当前票数是:83售出17线程名:t2
当前票数是:82售出18线程名:t3
当前票数是:81售出19线程名:t4
当前票数是:80售出20线程名:t1
当前票数是:79售出21线程名:t2
当前票数是:78售出22线程名:t3
当前票数是:77售出23线程名:t4
当前票数是:76售出24线程名:t1
当前票数是:75售出25线程名:t2
当前票数是:74售出26线程名:t3
当前票数是:73售出27线程名:t4

............................ 

你可能感兴趣的:(线程同步问题,线程上锁---多线程“卖票”实例)