IT干货网

多线程中的并发问题

qq123 2022年03月12日 编程设计 161 0

多线程中的并发问题

多线程会伴随并发问题,即多个线程对同时对同一个事物操作,可能导致操作结果与实际情况不符。

并发的一个典型场景是买车票,有多个人同时买车票,每个人作为一个线程,也就是多个线程同时对车票数量进行操作,导致并发。

以下代码模拟买车票:

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张票,这显然不符合要求,这就是多线程中的并发问题。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

用Runnable创建线程