Abo*_*net 0 java interface callback
interface CallableInterface
{
void callBackMethod();
}
class Worker
{
public static ArrayList<String> names = new ArrayList<String>();
static Timer t = new Timer();
public void addToList(String newAdd, CallableInterface callback)
{
names.add("BMW");
names.add("DODGE");
t.schedule(new TimerTask() {
@Override
public void run() {
names.add(newAdd);
}
}, 5000);
callback.callBackMethod();
}
public void printList(){
System.out.println(Worker.names);
}
}
class Boss implements CallableInterface
{
Worker w1 = new Worker();
public Boss(String carName)
{
w1.addToList(carName, this);
}
public void callBackMethod()
{
w1.printList();
}
}
public class IntroCallbacks
{
public static void main(String[] args)
{
Boss b = new Boss("Mercedes");
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用计时器模拟网络延迟.想法是等待计时器完成(在这种情况下为5秒),然后打印arrayList.无论我对代码做什么,我总是只能获得[BMW,DODGE].
它应该是[BMW,DODGE,MERCEDES].
我错过了什么?
Worker::addToListBoss::callBackMethod调度计时器后立即调用.这将打印列表,该列表目前只有2个元素.〜4.99秒后,最后一个元素被添加到列表中,但它已经被打印出来了.
如果您只想在添加第3个元素后打印列表,请将回调调用移到添加该元素之后:
public void addToList(String newAdd, CallableInterface callback)
{
names.add("BMW");
names.add("DODGE");
t.schedule(new TimerTask() {
@Override
public void run() {
names.add(newAdd);
callback.callBackMethod();
}
}, 5000);
}
Run Code Online (Sandbox Code Playgroud)
或者使用像a这样的同步机制 CountDownLatch