需求:一个简单的后台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(); } } } }
此程序只是做信息收集,并为后期数据统计做准备,通过单线程队列实现,避免申请过多的资源,影响原有业务的性能。