• java线程池处理并发业务


    /**
    * 缓存对象 map
    */
    public static CachePool<String, Object> mapPool = CachePool.getInstance();

    private static final int NTHREADS=5;
    // 使用线程池来避免 为每个请求创建一个线程。
    private static final Executor threadPool=Executors.newFixedThreadPool(NTHREADS);

    public FinancesVo buyProduct(FinancesVo financesVo) {
    mapPool.put("financesVo",financesVo);
    String key = "";
    Map param = new HashMap<String,String>();
    synchronized (mapPool){
    System.out.println("Thread.currentThread().getName()........................................"+Thread.currentThread().getName());
    Iterator it = mapPool.keySet().iterator();
    //缓存不为空时,取出一个值
    while (it.hasNext())
    {
    key = (String) it.next();
    financesVo = (FinancesVo) mapPool.get(key);
    param.put(key, financesVo);
    if (null != param){
    String resultCode="";
    financesVo=sureProduct(financesVo);
    if(financesVo.getIsTrue()){
    resultCode="success";
    }
    //为防止重复,将其移除
    mapPool.remove(key);
    }
    }
    }
    return financesVo;
    }

    public class CachePool<Key, Value> extends AbstractMap<Key, Value>{

    // 私有化缓存对象实例
    private static CachePool cachePool = new CachePool();
    private int maxCount = 1000;
    private BlockingQueue<Entry> queue = new LinkedBlockingQueue<Entry>();
    /**
    * private Constructor.
    * @return
    */
    private CachePool() {
    }
    /**
    * 开放一个公有方法,判断是否已经存在实例,有返回,没有新建一个在返回
    * @return
    */
    public static CachePool getInstance(){
    return cachePool;
    }

    /**
    * The Entry for this Map.
    * @author AnCan
    *
    */
    private class Entry implements Map.Entry<Key, Value>{
    private Key key;
    private Value value;

    public Entry(Key key, Value value){
    this.key = key;
    this.value = value;
    }

    @Override
    public String toString() {
    return key + "=" + value;
    }

    public Key getKey() {
    return key;
    }

    public Value getValue() {
    return value;
    }

    public Value setValue(Value value) {
    return this.value = value;
    }
    }



    /**
    * Constructor.
    * @param size the size of the pooled map;
    */
    public CachePool(int size) {
    maxCount = size;
    }

    @Override
    public Value put(Key key, Value value) {
    while(queue.size() >= maxCount){
    queue.remove();
    }
    queue.add(new Entry(key, value));
    return value;
    }

    @Override
    public Value get(Object key){
    for(Iterator<Entry> iter = queue.iterator();iter.hasNext();){
    Entry type = iter.next();
    if(type.key.equals(key)){
    queue.remove(type);
    queue.add(type);
    return type.value;
    }
    }
    return null;
    }

    @Override
    public Set<Map.Entry<Key, Value>> entrySet() {
    Set<Map.Entry<Key, Value>> set = new HashSet<Map.Entry<Key, Value>>();
    set.addAll(queue);
    return set;
    }

    @Override
    public void clear() {
    queue.clear();
    }

    @Override
    public Set<Key> keySet() {
    Set<Key> set = new HashSet<Key>();
    for(Entry e : queue){
    set.add(e.getKey());
    }
    return set;
    }

    @Override
    public Value remove(Object obj) {
    for(Entry e : queue){
    if(e.getKey().equals(obj)){
    queue.remove(e);
    return e.getValue();
    }
    }
    return null;
    }

    @Override
    public int size() {
    return queue.size();
    }
    }

  • 相关阅读:
    Jboss下jaxws的开发
    Jboss as 服务器基本设置
    classloader常见问题总结
    Servlet容器 Jetty
    Jetty 的工作原理以及与 Tomcat 的比较
    resin设置jvm参数
    Solr4.0使用
    Solr 4.0部署
    Solr 搜索功能使用
    HttpSolrServer 实例管理参考,来自org.eclipse.smila.solr
  • 原文地址:https://www.cnblogs.com/lengzhijun/p/6269799.html
Copyright © 2020-2023  润新知