我是Java的新手。我正在尝试学习Java中的回调。我通过googling找到了很多结果。但是我需要一些简单的例子来解释在Java中使用回调实现。我希望它应该是类似计时器,每隔一分钟打印一些信息。
答案 0 :(得分:1)
我正在打印您当前的日期和时间使用java.util.Date :
import java.util.Date; //importing this package just to use Date()
public class StackOverflowQ {
public interface CallBackInt{
String doJob(String str);
}
public static void main(String[] args) {
CallBackInt variable = new CallBackInt(){ //using the interface
public String doJob(String str) { //doJob method from interface
return (str + new Date().toString());
//used .toString() as return type of doJob is String
}
};
while (true) { //infinite loop
System.out.println(variable.doJob("Current Date Instance is: "));
try {
Thread.sleep(60*1000);
//time is in miliseconds and 60*1000 mili sec=60 seconds = 1 minute
}
catch (InterruptedException e) {
//if there are any Exception thrown, this will catch it and help you !
e.printStackTrace();
}
}
}
}
并且,线程是任何程序中的执行线程。 当前正在执行的任何进程都可以视为一个线程。 所以,在这个程序中 Thread.sleep 引用当前线程(当前是main()方法)。因此它暂停main()线程60秒并在暂停后重新开始,然后再次打印当前日期。
答案 1 :(得分:0)
面向对象,Java在老式意义上没有callbacks。相反,我们按照Observer pattern的方式执行某些操作,传递一个接口实例,该接口需要一个或多个名为某种方法的方法由另一个对象调用。在Java 8或更高版本中传递lambda将是另一种方法。
特别参见Executors tutorial和ScheduledExecutorService
课程。
以下是直接从该类文档中获取的示例代码。
import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
public void beepForAnHour() {
final Runnable beeper = new Runnable() {
public void run() { System.out.println("beep"); }
};
final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
scheduler.schedule(new Runnable() {
public void run() { beeperHandle.cancel(true); }
}, 60 * 60, SECONDS);
}
}