线程并发问题演示


package com.qiliang.Demo03;
// 线程并发问题演示
// 多个线程同时操作同一个对象
// 买火车票的例子

public class ThreadTest implements Runnable {

    // 定义票数
    private int ticketNums = 10;

    @Override
    public void run() {
        while(true){

            if(ticketNums<=0){
                break;
            }
            // 模拟延迟
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()
            +"-->拿到了第"+ticketNums--+"张票");
        }
    }

    // 执行方法
    public static void main(String[] args) {
        ThreadTest ticket = new ThreadTest();
        new Thread(ticket,"小A").start();
        new Thread(ticket,"小B").start();
        new Thread(ticket,"小C").start();
        /*
        小A-->拿到了第10张票
        小B-->拿到了第9张票
        小C-->拿到了第8张票
        小A-->拿到了第7张票
        小B-->拿到了第6张票
        小C-->拿到了第5张票
        小A-->拿到了第4张票
        小C-->拿到了第3张票
        小B-->拿到了第3张票
        小A-->拿到了第2张票
        小C-->拿到了第1张票
        小B-->拿到了第0张票
        小A-->拿到了第-1张票

        发现问题:多个线程操作同一个资源的情况下,线程不安全,数据紊乱
         */
    }
}

猜你喜欢

转载自www.cnblogs.com/liqiliang1437/p/12786977.html