zoukankan      html  css  js  c++  java
  • Sigleton 单例模式 的简单应用

    需求:一个简单的后台java程序,收集信息,并将信息发送到远端服务器。

    实现:实现一个后台线程,实时处理发送过来的信息,并将信息发送到服务器。

    技术要点:

    1、单例模式

    2、队列

    并没有实现全部代码,简单把技术要点写出来:

    import java.util.concurrent.BlockingQueue;
    import java.util.concurrent.LinkedBlockingQueue;
    
    /**
     * Created by Edward on 2016/6/28.
     */
    public class Singleton {
    
        private volatile static Singleton singleton = null;
        //队列
        private BlockingQueue queue = new LinkedBlockingQueue();
    
        private Singleton()
        {
        }
    
        private static Singleton getInstance(){
    
            //double check
            if(singleton == null)
                synchronized (Singleton.class){
                    if(singleton == null) {
                        singleton = new Singleton();
                        //create a thread
                        Thread thread = new Thread(new Runnable() {
                            public void run() {
                                singleton.getInfo();
                            }
                        });
                        thread.start();
                    }
                }
            return singleton;
        }
    
        public void getInfo()  {
            String str = null;
            while(true) {
                try {
                    //get info from queue
                    str = this.queue.take().toString();
                    this.sendMsg(str);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    
        //向服务端发送数据
        public void sendMsg(String msg){
            System.out.println(msg);
        }
    
        public void putInfo(String string)
        {
            //put info to queue
            getInstance().queue.add(string);
        }
    
        public static void main(String[] args)
        {
            for(int i=0; i<100;i++) {
                Singleton.getInstance().putInfo("info:" + i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }


    此程序只是做信息收集,并为后期数据统计做准备,通过单线程队列实现,避免申请过多的资源,影响原有业务的性能。

  • 相关阅读:
    atcoder #082 E 暴力 计算几何
    LightOJ 1364 树形DP
    gym100712 ACM Amman Collegiate Programming Contest
    CF757 C hash
    CF844 C 置换 水
    CF544 C 背包 DP
    CF540 D 概率 DP
    CF540 C BFS 水
    CF540 B 贪心
    CF745 C 并查集
  • 原文地址:https://www.cnblogs.com/one--way/p/5626799.html
Copyright © 2011-2022 走看看