java利用多线程实现异步调用
package com.test.t1; public class Test2 { public static void main(String[] args) { final FutureTicket ft = new FutureTicket(new MyProcessData()); // 在新线程中调用耗时操作 new Thread() { public void run() { ft.makeRealData(); } }.start(); ft.putData(); } } class FutureTicket { private Object data = null; private boolean completed = false; private ProcessData pd; public FutureTicket(ProcessData pd) { this.pd = pd; } public synchronized void makeRealData() { if (this.completed) return; // 获取数据的耗时操作.这里用Sleep代替 try { Thread.sleep(10000); } catch (Throwable t) { } this.data = "返回的数据内容"; this.completed = true; notifyAll(); } public synchronized void putData() { while (!this.completed) { try { wait(); } catch (Throwable t) { } } // return this.data; // 不用返回了,直接处理 this.pd.process(this.data); // alert(?); } // 这个方法也可以不要了. public boolean isCompleted() { return this.completed; } } interface ProcessData { public void process(Object data); } class MyProcessData implements ProcessData { public void process(Object data) { // 你不管什么时候起初数据data被获取了. // 你只要规定如果获取到数据了如何处理 System.out.println(data.toString() + "处理完成..........."); // insert into dataBase? } }