多线程访问共享数据-继承Thread类出现数据重复的问题

public class TicketingTaskThread extends Thread {

    //竞争资源--车票池购票数量
    //volatile保证了线程之间的可见性;
    //threadLocal保证了线程之间的不可见性
    private static volatile int quanlity = 100;
    //为了保证线程安全性
    AtomicInteger atomic = new AtomicInteger(quanlity);

    /**
     * 需要执行的任务
     */
    @Override
    public void run() {
        //当然也可以用ReteentLock或者synochronized去实现
        //功能和volatile类似
        while (atomic.get() > 0) {
            System.out.println("获取当前的售票的数量"+atomic.get());
            atomic.getAndDecrement();
        }
    }
=============main-=================
  //卖票任务
    TicketingTaskThread ticketingTaskThread = new TicketingTaskThread();
    TicketingTaskThread ticketingTaskThread1 = new TicketingTaskThread();
    //开始买票
    ticketingTaskThread.start();
    ticketingTaskThread1.start();
}
获取当前的售票的数量100
获取当前的售票的数量99
获取当前的售票的数量98
获取当前的售票的数量97
获取当前的售票的数量96
获取当前的售票的数量95
获取当前的售票的数量94
获取当前的售票的数量93
获取当前的售票的数量92
获取当前的售票的数量91
获取当前的售票的数量90
获取当前的售票的数量89
获取当前的售票的数量88
获取当前的售票的数量87
获取当前的售票的数量86
获取当前的售票的数量85
获取当前的售票的数量84
获取当前的售票的数量83
获取当前的售票的数量82
获取当前的售票的数量81
获取当前的售票的数量80
获取当前的售票的数量79
获取当前的售票的数量78
获取当前的售票的数量77
获取当前的售票的数量76
获取当前的售票的数量75
获取当前的售票的数量74
获取当前的售票的数量73
获取当前的售票的数量72
获取当前的售票的数量71
获取当前的售票的数量70
获取当前的售票的数量69
获取当前的售票的数量68
获取当前的售票的数量67
获取当前的售票的数量66
获取当前的售票的数量65
获取当前的售票的数量64
获取当前的售票的数量63
获取当前的售票的数量62
获取当前的售票的数量61
获取当前的售票的数量60
获取当前的售票的数量59
获取当前的售票的数量58
获取当前的售票的数量57
获取当前的售票的数量56
获取当前的售票的数量55
获取当前的售票的数量54
获取当前的售票的数量53
获取当前的售票的数量52
获取当前的售票的数量51
获取当前的售票的数量50
获取当前的售票的数量49
获取当前的售票的数量48
获取当前的售票的数量47
获取当前的售票的数量46
获取当前的售票的数量45
获取当前的售票的数量44
获取当前的售票的数量43
获取当前的售票的数量42
获取当前的售票的数量41
获取当前的售票的数量40
获取当前的售票的数量39
获取当前的售票的数量38
获取当前的售票的数量37
获取当前的售票的数量36
获取当前的售票的数量35
获取当前的售票的数量34
获取当前的售票的数量33
获取当前的售票的数量32
获取当前的售票的数量31
获取当前的售票的数量30
获取当前的售票的数量29
获取当前的售票的数量28
获取当前的售票的数量27
获取当前的售票的数量26
获取当前的售票的数量25
获取当前的售票的数量24
获取当前的售票的数量23
获取当前的售票的数量22
获取当前的售票的数量21
获取当前的售票的数量20
获取当前的售票的数量19
获取当前的售票的数量18
获取当前的售票的数量17
获取当前的售票的数量16
获取当前的售票的数量15
获取当前的售票的数量14
获取当前的售票的数量13
获取当前的售票的数量12
获取当前的售票的数量11
获取当前的售票的数量10
获取当前的售票的数量9
获取当前的售票的数量8
获取当前的售票的数量7
获取当前的售票的数量6
获取当前的售票的数量5
获取当前的售票的数量4
获取当前的售票的数量3
获取当前的售票的数量2
获取当前的售票的数量1
获取当前的售票的数量100
获取当前的售票的数量99
获取当前的售票的数量98
获取当前的售票的数量97
获取当前的售票的数量96
获取当前的售票的数量95
获取当前的售票的数量94
获取当前的售票的数量93
获取当前的售票的数量92
获取当前的售票的数量91
获取当前的售票的数量90
获取当前的售票的数量89
获取当前的售票的数量88
获取当前的售票的数量87
获取当前的售票的数量86
获取当前的售票的数量85
获取当前的售票的数量84
获取当前的售票的数量83
获取当前的售票的数量82
获取当前的售票的数量81
获取当前的售票的数量80
获取当前的售票的数量79
获取当前的售票的数量78
获取当前的售票的数量77
获取当前的售票的数量76
获取当前的售票的数量75
获取当前的售票的数量74
获取当前的售票的数量73
获取当前的售票的数量72
获取当前的售票的数量71
获取当前的售票的数量70
获取当前的售票的数量69
获取当前的售票的数量68
获取当前的售票的数量67
获取当前的售票的数量66
获取当前的售票的数量65
获取当前的售票的数量64
获取当前的售票的数量63
获取当前的售票的数量62
获取当前的售票的数量61
获取当前的售票的数量60
获取当前的售票的数量59
获取当前的售票的数量58
获取当前的售票的数量57
获取当前的售票的数量56
获取当前的售票的数量55
获取当前的售票的数量54
获取当前的售票的数量53
获取当前的售票的数量52
获取当前的售票的数量51
获取当前的售票的数量50
获取当前的售票的数量49
获取当前的售票的数量48
获取当前的售票的数量47
获取当前的售票的数量46
获取当前的售票的数量45
获取当前的售票的数量44
获取当前的售票的数量43
获取当前的售票的数量42
获取当前的售票的数量41
获取当前的售票的数量40
获取当前的售票的数量39
获取当前的售票的数量38
获取当前的售票的数量37
获取当前的售票的数量36
获取当前的售票的数量35
获取当前的售票的数量34
获取当前的售票的数量33
获取当前的售票的数量32
获取当前的售票的数量31
获取当前的售票的数量30
获取当前的售票的数量29
获取当前的售票的数量28
获取当前的售票的数量27
获取当前的售票的数量26
获取当前的售票的数量25
获取当前的售票的数量24
获取当前的售票的数量23
获取当前的售票的数量22
获取当前的售票的数量21
获取当前的售票的数量20
获取当前的售票的数量19
获取当前的售票的数量18
获取当前的售票的数量17
获取当前的售票的数量16
获取当前的售票的数量15
获取当前的售票的数量14
获取当前的售票的数量13
获取当前的售票的数量12
获取当前的售票的数量11
获取当前的售票的数量10
获取当前的售票的数量9
获取当前的售票的数量8
获取当前的售票的数量7
获取当前的售票的数量6
获取当前的售票的数量5
获取当前的售票的数量4
获取当前的售票的数量3
获取当前的售票的数量2
获取当前的售票的数量1
===============================
针对这个问题的解决方案见下一篇博客

猜你喜欢

转载自blog.csdn.net/wb_zjp283121/article/details/88971629
今日推荐