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这样的票号*/
线程安全
最新推荐文章于 2024-08-08 10:02:07 发布