私はScheduledExecutorService
を使用し、タスクが遅れて実行されるという単純な例があります。私はこれが私のカメラオブジェクトから戻ってきたデータに良い方法であるかどうかを知りたいと思います。ScheduledExecutorServiceからデータを取得する方法
public class App {
private final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
private final Camera camera = new Camera();
private Object lastPicture;
public static void main(String[] args) {
App app = new App();
app.takePicture();
// getLatestPicture when I need it on my frontend, in the future. (so image that this part can get called anytime).
// I also want to check if this picture is not the same as the last. (I might call getLastPicture multiple times within the second.)
Object currentPicture = app.getLastPicture();
if (lastPicture == currentPicture) {
System.out.println("Same picture");
}
System.out.println(currentPicture);
}
private void takePicture() {
executorService
.scheduleWithFixedDelay(takePictureTask(), 0, 1000, TimeUnit.MILLISECONDS);
}
private Runnable takePictureTask() {
return() -> camera.takePicture();
}
public Object getLatestPicture() {
return camera.getPicture();
}
}
カメラは: - おそらくのでMovieCamera
作る
public class Camera {
private Object picture;
public void takePicture() {
System.out.println("Taking picture...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
picture = new Object();
System.out.println("Finished taking picture.");
}
public Object getPicture() {
return picture;
}
}
これは、「呼び出し可能」がhttps://blogs.oracle.com/corejavatechtips/using-callable-to-return-results-from-runnablesのためのものです – Oleg
'scheduleWithFixedDelay'と' scheduleAtFixedRate'は 'Callable 'param、それは実行される特定のタスクではないためです。 –
これはあなたの質問から明らかではありませんでした。あなたは 'ピクチャ'を揮発性にする必要があり、その後は正常です。 – Oleg