需求:一個簡單的後臺java程式,收集信息,並將信息發送到遠端伺服器。 實現:實現一個後臺線程,實時處理髮送過來的信息,並將信息發送到伺服器。 技術要點: 1、單例模式 2、隊列 並沒有實現全部代碼,簡單把技術要點寫出來: 此程式只是做信息收集,併為後期數據統計做準備,通過單線程隊列實現,避免申請過 ...
需求:一個簡單的後臺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(); } } } }
此程式只是做信息收集,併為後期數據統計做準備,通過單線程隊列實現,避免申請過多的資源,影響原有業務的性能。