我想做两节课。一个(class Mover
)正在更改其他(class Window
)用于重新绘制每个1/30 seconds
内容的字段。我想让它们互换工作(Mover,Window,Mover,Window,Mover,Window,Mover,Window ......)。 Mover
正在等待Window
正在计算,Mover
正在等待Window
正在重新投放。
我正在寻找像
一样工作的线程队列 q.next(); next thread is awakening and the current is going to the end to wait
但没有找到。如何以最简单的方式做到这一点。
会有很多推动者和一个窗口。
答案 0 :(得分:0)
听起来你正在尝试解决生产者 - 消费者的问题。可能是您可以在某些常见锁上同步Mover / Window,然后使用wait / notify功能。像下面的东西
class Lock {
public static Lock INSTANCE = new Lock();
}
class Mover {
public void move() {
synchronized(Lock.INSTANCE) {
//do the move
Lock.INSTANCE.notifyAll();
Lock.INSTANCE.wait();
}
}
}
class Window {
public void paint() {
synchronized(Lock.INSTANCE) {
//do the paint
Lock.INSTANCE.notifyAll();
Lock.INSTANCE.wait();
}
}
}
答案 1 :(得分:0)
由于任务应该可以互换地运行,因此不需要使用单独的线程来运行任务,因为很难获得正确的并发性。使用ScheduledExecutorService在一个线程中定期运行逻辑。
ScheduledExecutorService ses = Executors.newScheduledThreadPool(1);
ses.schedule(new Runnable(){
public void run(){
mover.run();
window.run();
}
}, 1000/30, TimeUnit.MILLISECONDS);