我试图创建一个接口,在实现时,方法内的任何内容都将在一个单独的线程上连续执行。
希望这个描述有意义,这就是想法。
接口:
public interface Painting {
void onPaint();
}
主题:
public class Paintable implements Runnable, Painting {
@Override
public void run() {
onPaint();
}
@Override
public void onPaint() {
}
}
最后,目标是你实现绘画,这需要你实现和覆盖onPaint方法。然后,当执行该线程时,无论您决定放入该方法,都将在Paintable Thread上运行。
public class Main implements Painting {
private static final ScheduledThreadPoolExecutor THREAD_POOL_EXECUTOR = new ScheduledThreadPoolExecutor(3);
public static void main(String[] args) {
THREAD_POOL_EXECUTOR.scheduleAtFixedRate(new Paintable(), 0, 100, TimeUnit.MILLISECONDS);
@Override
public void onPaint() {
System.out.println("This text should be continously printed, but is not.");
}
}
答案 0 :(得分:1)
好的,所以你有一个绘图界面,并想把它转换成一个调用onPaint()的Runnable。
你可以这样做:
public class PaintingRunnable implements Runnable {
private final Painting painting;
public PaintingRunnable(Painting painting) {
this.painting = painting;
}
@Override
public void run() {
this.painting.onPaint();
}
}
因此,您可以使用
从绘画中制作出RunnableRunnable runnableThatCallsOnPaint = new PaintingRunnable(somePainting);
但这有点矫枉过正,因为你可以在没有任何使用lambda的类的情况下做同样的事情:
Runnable runnableThatCallsOnPaint = () -> somePaining.onPaint()
您甚至可以使用方法参考:
Runnable runnableThatCallsOnPaint = somePaining::onPaint
答案 1 :(得分:0)
正如上面的回答中所提到的,我同意这一点。你必须创建一个模板类来定义你的步骤,并且在每个步骤中执行什么,你必须由子类或类的委托定义,这将执行精确的逻辑。
主要课程:
public class Main implements Painting {
private static final ScheduledThreadPoolExecutor THREAD_POOL_EXECUTOR = new ScheduledThreadPoolExecutor(3);
public static void main(String[] args) {
THREAD_POOL_EXECUTOR.scheduleAtFixedRate(new Paintable(new Main()), 0, 100, TimeUnit.MILLISECONDS);
}
@Override
public void onPaint() {
System.out.println("This text should be continously printed, but is not.");
}
}
可上漆的司机班
public class Paintable implements Runnable {
private final Painting painting;
public Paintable(Painting painting) {
this.painting = painting;
}
@Override
public void run() {
painting.onPaint();
}
}