首页 > 编程语言 > 详细

java 简单秒杀

时间:2017-05-19 20:48:28      阅读:297      评论:0      收藏:0      [点我收藏+]

以下代码 不考虑多服务器

限制线程池的大小 和队列的限制来实现

 

package org.zhang;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 单服务器用线程池实现秒杀的思路一
 * 
 * @author zhanghaijun
 * 
 */
public class ExecutorsTest {

	public static boolean flag = true; // 秒杀物品的标记

	public static void main(String[] args) {
		ThreadPoolExecutor pool = new ThreadPoolExecutor(1, 1, 0L,
				TimeUnit.MILLISECONDS, new SynchronousQueue<Runnable>());
		ThreadTest t1 = new ThreadTest("张三");
		ThreadTest t2 = new ThreadTest("李四");
		ThreadTest t3 = new ThreadTest("王五");
		try {
			pool.execute(t1);
		} catch (Exception e) {
			System.out.println(t1.getUserName() + "没有抢到");
		}

		try {
			pool.execute(t3);
		} catch (Exception e) {
			System.out.println(t3.getUserName() + "没有抢到");
		}

		try {
			pool.execute(t2);
		} catch (Exception e) {
			System.out.println(t2.getUserName() + "没有抢到");
		}
		pool.shutdown();
	}

}

class ThreadTest extends Thread {

	private String userName;

	public ThreadTest(String userName) {
		super();
		this.userName = userName;
	}

	@Override
	public void run() {
		try {
			Thread.sleep(200);
			if (ExecutorsTest.flag) {
				System.out.println(this.userName + "秒杀成功");
				ExecutorsTest.flag = false;
			}

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

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

}

java 简单秒杀

原文:http://www.cnblogs.com/ouyangping/p/6880122.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!