我让三个线程充当三个售票窗口售卖100张票,但是会出现三个线程卖出同一张票的现象
会发现窗口一和窗口二都卖出了同一张票,这是为什么?
原因就是java多线程执行的随机性
代码讲解 卖票的类
public class SaleTickets implements Runnable{
private int tickets = 1;
@Override
public void run() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
while (true){
if(tickets <= 200){
System.out.println(Thread.currentThread().getName()+"正在出售第"+tickets+"张票");
tickets++;
}
}
}
}
main函数
public static void main(String[] args) {
SaleTickets saleTickets = new SaleTickets();
Thread thread1 = new Thread(saleTickets,"窗口一");
Thread thread2 = new Thread(saleTickets,"窗口二");
Thread thread3 = new Thread(saleTickets,"窗口三");
thread1.start();
thread2.start();
thread3.start();
}
解决方法就是要实现同步 所谓的线程同步有三种同步方法 1.同步代码块 2.同步方法 同步方法又分为 2.1同步普通的方法 和 2.2同步静态方法
具体的实现方法我们放到外面去用具体的案例来讲讲解
|