私は本で例を挙げており、トラフィックライトがシミュレートされたスレッド化された例があります。私はこのプログラムのほとんどを理解していますが、「別のスレッドがそれぞれのトラフィックライトを実行する」という部分については混乱していますが、メインアプリケーションには1つのスレッドしか作成されていないようです。 私は、私の交通信号のすべての定数を列挙しています。Threaded TrafficLight多数のスレッドを例にしていますか?
public enum TrafficLightColor {
YELLOW,GREEN,RED
}
これは残りのプログラムです。
public class TrafficLightSimulator implements Runnable {
private Thread thread;//holds the thread that runs the simulation
private TrafficLightColor color;//holds the traffic light color
boolean stop=false;//set to true to stop the simulation
boolean changed=false;//true when the light has changed
public TrafficLightSimulator(TrafficLightColor inital){
color=inital;
thread=new Thread(this);
thread.start();
}
public TrafficLightSimulator(){
color=TrafficLightColor.RED;
thread=new Thread(this);
thread.start();
}
@Override
public void run() {
//start up the light
while(!stop){
try{
switch(color){
case GREEN:
Thread.sleep(10000);//green sleeps for 10 seconds
break;
case RED:
Thread.sleep(2000);//yellow for 2 seconds
break;
case YELLOW:
Thread.sleep(12000);//red for 12 seconds
break;
}
}catch(Exception e){
}
changeColor();
}
}
synchronized void changeColor(){
switch(color){
case RED:
color=TrafficLightColor.GREEN;
break;
case YELLOW:
color=TrafficLightColor.RED;
break;
case GREEN:
color=TrafficLightColor.YELLOW;
}
changed=true;
System.out.println("Notfiy Called We changed the light");
notify();
}
synchronized void waitForChange(){
try{
while(!changed){
System.out.println("waiting for Light to change");
wait();
}
changed=false;
}catch(Exception e){
}
}
synchronized TrafficLightColor getColor(){
return color;
}
synchronized void cancel(){
stop=true;
}
}
class Demo{
public static void main(String[]args){
TrafficLightSimulator t1=new TrafficLightSimulator(TrafficLightColor.YELLOW);
for(int i=0;i<9;i++){
System.out.println(t1.getColor());
t1.waitForChange();
}
t1.cancel();
}
}
は二つのスレッド、プログラムのメインスレッドと交通シミュレータのスレッドがありますが、多分本は誤植を持っており、彼らは意味* – Gusman
なぜmehtodsを行います同期する必要があるTrafficLightSimulator上でスレッドが1つしか動作しない場合はhronizedですか? – Eli
他のスレッドがTrafficLightSimulatorスレッドと通信しているメインスレッドだと思いますか? – Eli