1.1. 什么是线程安全
如果有多个线程同时运行同一个实现了Runnable接口的类,程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的;反之,则是线程不安全的。
1.2. 问题演示为了演示线程安全问题,我们采用多线程模拟多个窗口同时售卖《肥潘大战猪八戒》电影票。
1.2.1. 第一步:创建售票线程类
package com.thread;
/**
* @Auther: lanhaifeng
* @Date: 2019/11/20 0020 21:06
* @Description:多线程模拟多个窗口同时售卖电影票
* @statement:
*/
public class Ticket implements Runnable{
private int ticktNum= 0;//票号
//线程售票
public void run() {
while(ticktNum<10){ //模拟售10张票
//1.模拟出票时间
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//2.打印进程号和票号,票数减1
String name = Thread.currentThread().getName();
System.out.println("线程"+name+"售票:票号"+ticktNum++);
}
}
public static void main(String[] args) {
Ticket ticket = new Ticket();
Thread thread1 = new Thread(ticket, "窗口1");
Thread thread2 = new Thread(ticket, "窗口2");
Thread thread3 = new Thread(ticket, "窗口3");
thread1.start();
thread2.start();
thread3.start();
}
}