package com.ajax;
//线程安全
public class Example07 {public static void main(String[] args){SaleThread saleThread=new SaleThread();new Thread(saleThread,"线程一").start();new Thread(saleThread,"线程二").start();new Thread(saleThread,"线程三").start();new Thread(saleThread,"线程四").start();}
}
class SaleThread implements Runnable{private int tickets=10;public void run(){while(tickets>0){try{Thread.sleep(10);}catch(InterruptedException e){e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"---卖出的票"+tickets--);}}
}
/*运行结果:
线程四---卖出的票9
线程一---卖出的票10
线程二---卖出的票8
线程三---卖出的票7
线程四---卖出的票6
线程一---卖出的票5
线程三---卖出的票4
线程二---卖出的票4
线程一---卖出的票3
线程四---卖出的票2
线程三---卖出的票1
线程二---卖出的票0
线程四---卖出的票-1
线程一---卖出的票-2
解释:
假设线程一此时出售1号票,对票号进行判断后,进入while循环,在售票之前通过sleep方法让线程休眠,这时候线程二进行售票,相当于线程二会进行售票,由于此时票号仍为
1,因此线程二也会进入循环,同理,四个线程都会进入while循环,休眠结束后,四个线程都会进行售票,这样就相当于将票号减了四次,结果中出现了0,-1,-2这样的票号*/