jb12.0 threads.enums
import java.util.*;
import java.lang.*;
class Rextester
{
public static void main(String args[])
{
Signals signal = Signals.RED;
System.out.println(signal);
TraficLights tl = new TraficLights();
Thread t = new Thread(tl, "trafic light");
t.start();
for(int i = 0; i<10; i++){
signal = tl.getSignal();
System.out.printf("%s:\t%s\twait time = %s\n", Calendar.getInstance().get(Calendar.MILLISECOND), signal, signal.getWaitTime());
tl.waitChange();
}
tl.stop();
}
}
enum Signals{
RED(150), YELLOW(30), GREEN(500);
private int _waitTime;
public int getWaitTime(){
return _waitTime;
}
Signals(int waitTime){
_waitTime = waitTime;
}
}
class TraficLights implements Runnable{
private Signals _signal;
private boolean _stop;
private boolean _waiting = true;
public void run(){
while(!_stop){
try{
switch(_signal){
case RED: Thread.sleep(_signal.getWaitTime()); break;
case YELLOW: Thread.sleep(_signal.getWaitTime()); break;
case GREEN: Thread.sleep(_signal.getWaitTime()); break;
}
}catch(InterruptedException e){
System.out.println("error, interrupted sleep");
System.out.println(e);
}
changeSignal();
_waiting = false;
}
}
synchronized private void changeSignal(){
switch(_signal){
case RED: _signal = Signals.YELLOW; break;
case YELLOW: _signal = Signals.GREEN; break;
case GREEN: _signal = Signals.RED; break;
}
notify();
}
synchronized public void waitChange(){
try{
while(_waiting) wait();
}catch(InterruptedException e){
System.out.println("error, interrupted wait");
System.out.println(e);
}
_waiting = true;
}
public void stop(){
_stop = true;
}
public Signals getSignal(){
return _signal;
}
TraficLights(Signals signal){
_signal = signal;
}
TraficLights(){
_signal = Signals.RED;
}
}
|
run
| edit
| history
| help
|
0
|
|
|