前几天,通过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();
}
}