java应用lambda表达式做回调函数,定义一个interface写一个办法即可(如果一个接口只有一个形象办法(包含继承的),该接口是一个函数接口,函数接口能够应用lambda表达式实现),lambda表达式函数外部能够获取内部变量,会保留堆栈信息
源码
Callback.java
public interface Callback{ void onCompletion();}
Test.java
public class Test implements Runnable { BlockingDeque<Callback> queue = new LinkedBlockingDeque<>(); void init(){ Thread thread = new Thread(this,"Test"); thread.start(); } void sendAsync(Callback callback){ queue.add(callback); } @Override public void run() { while (true){ try { Thread.sleep(10); Callback callback = queue.take(); callback.onCompletion(); } catch (InterruptedException e) { e.printStackTrace(); } } }}
TestObject.java
public class TestObject { public String getVal() { return val; } public void setVal(String val) { this.val = val; } private String val;}
Main.java
public class Main { public static void main(String[] args) { Test test = new Test(); test.init(); for(int i=0;i<10;i++){ String data = "i=" + i; TestObject obj = new TestObject(); obj.setVal(data); System.out.println("handle before" + obj + obj.getVal()); System.out.println(Thread.currentThread().getName()); test.sendAsync(()->{ System.out.println("handle"+obj + obj.getVal()); System.out.println(Thread.currentThread().getName()); }); } }}