前几天,通过Thread的同步代码块的方式,写了买票的案例,现在通过AtomicInteger这个类,实现了买票的案例,通过这个类,效率比 通过Thread的同步方法效率高,写多线程的时候,一定要先获取到剩余多少张票,然后做加减法,不然会导致负数票的参生

代码

代码部分是通过实现Runnable接口,通过多个Thread调用多线程,TicketThread在构造函数中,传入票数,调用AtomicInteger完成同步操作

这个下面的是错误的案例,由于

package com.ted.auth.service.impl;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 创建日期:2017年10月5日 <br/>
 * 创建用户:yellowcong <br/>
 * 功能描述:
 */
public class TicketThread implements Runnable {
    private AtomicInteger count;


    public TicketThread(Integer count) {
        super();
        this.count = new AtomicInteger(count);
    }

    public void run() {
        // TODO Auto-generated method stub
        int cnt;
        try {
            while ((cnt = count.decrementAndGet()) > 0) {
                System.out.println(Thread.currentThread().getName() + "买票,还剩" + cnt);
                Thread.sleep(500);

            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        TicketThread th = new TicketThread(100);

        new Thread(th, "买票员1").start();
        new Thread(th, "买票员2").start();
        new Thread(th, "买票员3").start();
        new Thread(th, "买票员4").start();
    }
}