Java之多线程AtomicInteger (多人买票) -yellowcong

来源:互联网 发布:机械结构优化设计 编辑:程序博客网 时间:2024/05/17 06:33

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

代码

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

package com.yellowcong.thread.demo;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        while (true) {            int cnt = count.get();            if(cnt >0){                 count.decrementAndGet();                 System.out.println(Thread.currentThread().getName() + "买票,还剩" + cnt);            }else {                Thread.currentThread().stop();            }            try {                Thread.sleep(500);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                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();    }}
原创粉丝点击