Edit w osobnym poście, by nikomu nie umknęło:
package pl.koziolekweb._4p;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
public class Application {
public static void main(String[] args) throws InterruptedException {
EventBus eventBus = new EventBus();
Aukcja aukcja = new Aukcja(0, 5);
eventBus.register(aukcja);
ScheduledExecutorService zegar = Executors.newSingleThreadScheduledExecutor();
PanTikTak panTikTak = new PanTikTak(eventBus);
zegar.scheduleAtFixedRate(panTikTak, 1L, 1L, TimeUnit.SECONDS);
}
}
class PanTikTak implements Runnable {
private final AtomicInteger tik;
private final EventBus eventBus;
PanTikTak(EventBus eventBus) {
this.eventBus = eventBus;
this.tik = new AtomicInteger(0);
}
@Override
public void run() {
int t = tik.addAndGet(1);
System.out.println("Tik: " + t);
eventBus.post(new TickEvent(t));
}
}
class TickEvent{
final int tick;
TickEvent(int tick) {
this.tick = tick;
}
}
class Aukcja{
private final int initialTick;
private final int finalTick;
public Aukcja(int initialTick, int finalTick) {
this.initialTick = initialTick;
this.finalTick = finalTick;
System.out.println("Zaczynam aukcję");
}
@Subscribe
public void ktoraGodzina(TickEvent tickEvent){
if(tickEvent.tick > finalTick)
System.out.println("Zakończ aukcję");
else
System.out.println("Obstawiaj");
}
}
Kompletna aplikacja, która implementuje opcję nr 4. Oczywiście bardzo prymitywna, ale widać, o co chodzi.