码迷,mamicode.com
首页 > 编程语言 > 详细

java 简单秒杀

时间:2017-05-19 21:03:35      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:线程   blocking   title   over   adt   function   lis   str   locking   

以下代码 不考虑多服务器

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

 

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 简单秒杀

标签:线程   blocking   title   over   adt   function   lis   str   locking   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!