多线程中的并发问题
多线程中的并发问题
多线程会伴随并发问题,即多个线程对同时对同一个事物操作,可能导致操作结果与实际情况不符。
并发的一个典型场景是买车票,有多个人同时买车票,每个人作为一个线程,也就是多个线程同时对车票数量进行操作,导致并发。
以下代码模拟买车票:
package com.cxf.multithread.parrell;
public class TestForParalle {
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(ticket,"迪迦奥特曼").start();
new Thread(ticket,"黑猫警长").start();
new Thread(ticket,"黄牛").start();
}
}
class Ticket implements Runnable{
int num = 10;
@Override
public void run() {
while (num > 0) {
System.out.println(Thread.currentThread().getName() + "拿到了第" + num-- + "张票");
}
}
}
输出结果:
黑猫警长拿到了第10张票
黄牛拿到了第9张票
迪迦奥特曼拿到了第9张票
黄牛拿到了第7张票
黑猫警长拿到了第8张票
黄牛拿到了第5张票
迪迦奥特曼拿到了第6张票
黄牛拿到了第3张票
黑猫警长拿到了第4张票
黄牛拿到了第1张票
迪迦奥特曼拿到了第2张票
第二行第三行,黄牛和迪迦奥特曼竟然同时抢到了第9张票,这显然不符合要求,这就是多线程中的并发问题。