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?
}
}