Java異步和回調 Demo

public interface CallBack {
/**
* 執行回調方法
* @param objects 將處理後的結果作爲參數返回給回調方法
*/
public void execute(Object... objects );
}


public class Local implements CallBack,Runnable{
private Remote remote;

/**
* 發送出去的消息
*/
private String message;

public Local(Remote remote, String message) {
super();
this.remote = remote;
this.message = message;
}

/**
* 發送消息
*/
public void sendMessage()
{
/**當前線程的名稱**/
System.out.println(Thread.currentThread().getName());
/**創建一個新的線程發送消息**/
Thread thread = new Thread(this);
thread.start();
/**當前線程繼續執行**/
System.out.println("Message has been sent by Local~!");
}

/**
* 發送消息後的回調函數
*/
public void execute(Object... objects ) {
/**打印返回的消息**/
System.out.println(objects[0]);
/**打印發送消息的線程名稱**/
System.out.println(Thread.currentThread().getName()); //Thread-0
/**中斷髮送消息的線程**/
Thread.interrupted();
}

public static void main(String[] args)
{
Local local = new Local(new Remote(),"Hello");

local.sendMessage();
}

public void run() {
System.out.println(Thread.currentThread().getName()); //Thread-0
remote.executeMessage(message, this); //這相當於給同學打電話,打完電話之後,這個線程就可以去做其他事情了,只不過等到你的同學打回電話給你的時候你要做出響應

}
}


public class Remote {
/**
* 處理消息
* @param msg 接收的消息
* @param callBack 回調函數處理類
*/
public void executeMessage(String msg,CallBack callBack)
{
/**模擬遠程類正在處理其他事情,可能需要花費許多時間**/
for(int i=0;i<1000000000;i++)
{

}
/**處理完其他事情,現在來處理消息**/
System.out.println(msg);
System.out.println("Remote hava executed the message from Local");
/**執行回調**/
callBack.execute(new String[]{"Nice to meet you~!"}); //這相當於同學執行完之後打電話給你
System.out.println(Thread.currentThread().getName()); //Thread-0
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章