從剛接觸jquery時(shí)感受到了回調(diào)這種寫(xiě)法,之后學(xué)習(xí)android的時(shí)候,發(fā)現(xiàn)也提供了很多回調(diào)方法.于是一直自己想寫(xiě)一寫(xiě) 回調(diào).最近在學(xué)習(xí)netty.于是開(kāi)始實(shí)現(xiàn)了一下.
代碼:
public class Task2 implements Runnable {
private Callbacka callbacka;
public Task2(Callbacka callbacka) {
this.callbacka = callbacka;
}
@Override
public void run() {
try {
callbacka.func();
callbacka.onSuccess();
}catch (Exception e){
callbacka.onFailure(e);
}
}
}
public interface Callbacka {
public void func();
public void onSuccess();
public void onFailure(Exception e);
}
public class Testtt {
public static void main(String[] args){
MyThreadPool myThreadPool=new MyThreadPool();
// Task task1=new Task(new Callbacka() {
// @Override
// public void func() {
// System.out.println(Thread.currentThread().getName()+" 假裝在做些什么");
// try {
// Thread.sleep(3000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// System.out.println(Thread.currentThread().getName()+" 做完了");
// }
// @Override
// public void onSuccess() {
// System.out.println(Thread.currentThread().getName()+" 做完了之后要這樣做,請(qǐng)注意看看");
// }
// });
Task2 task1=new Task2(new Callbacka() {
@Override
public void func() {
System.out.println(Thread.currentThread().getName()+" 假裝在做些什么");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" 做完了");
}
@Override
public void onSuccess() {
System.out.println(Thread.currentThread().getName()+" 做完了之后要這樣做,請(qǐng)注意看看");
}
@Override
public void onFailure(Exception e) {
System.out.println(Thread.currentThread().getName()+" 出現(xiàn)了異常");
}
});
ExecutorService executorService= Executors.newCachedThreadPool();
executorService.submit(task1);
System.out.println(Thread.currentThread().getName()+" 我在主線程啊!沒(méi)被阻塞啊");
System.out.println(Thread.currentThread().getName()+" 主線程在做寫(xiě)工作");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" 主線程做完了");
}
}