One-Way
爱一人,攀一山,追一梦

需求:一个简单的后台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();
            }
        }
    }
}


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

 

posted on 2016-06-29 14:49  单行道|  阅读(590)  评论(0编辑  收藏  举报