多线程的并发执行可以提高程序的效率,但是,当多个线程去访问同一个资源时,也会引发一些安全问题。例如,当统计一个班级的学生数目时,如果有同学进进出出,则很难统计正确。
模拟四个窗口出售10张票,并在售票代码中使每次售票时线程休眠10ms。
ExampleM11:
///线程安全
public class ExampleM11 {
public static void main(String[] args) {
SaleThread saleThread = new SaleThread(); //创建 saleThread对象
//创建并开启四个线程
new Thread(saleThread,"线程一").start();
new Thread(saleThread,"线程二").start();
new Thread(saleThread,"线程三").start();
new Thread(saleThread,"线程四").start();
}
}
//定义 Ticket1类实现 Runnable 接口
class SaleThread implements Runnable {
private int tickets = 10; //10张票
public void run() {
while (tickets>0) {
try{
Thread.sleep(10); //经过此此线程休眠 10毫秒
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"---卖出的票"+tickets--);
}
}
}