我想在java中使用多線程概念實現交通信號。我想使用同步。這是我寫的代碼,但它不會按照我的期望運行:P ..我實際上做的是採用一個變量「a」,它的值決定了在特定時間應該打開哪個燈。例如:a == 0應該給紅燈,然後紅燈獲得「a」的鎖定,並在某個間隔後將值更改爲== 1,然後打開到橙燈,綠燈也是如此以及..java多線程交通信號示例
代碼:
package test;
class Lights implements Runnable {
int a=0,i,j=25;
synchronized public void valueA()
{
a=a+1;
}
public void showLight()
{
System.out.println("The Light is "+ Thread.currentThread().getName());
}
@Override
public void run() {
// TODO Auto-generated method stub
for(i=25;i>=0;i--)
{
while(j<=i&&j>=10&&a==0)
{
showLight();
/*some code here that locks the value of "a" for thread 1
and keeps it until thread 1 unlocks it! */
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
j--;
}
while(j<10&&j>=5&&a==1)
{
showLight();
/*some code here that locks the value of "a" for thread 1
and keeps it until thread 1 unlocks it! */
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
j--;
}
while(j<5&&j>=0&&a==2)
{
showLight();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
主類:當你有類的幾個不同的實例
package test;
public class MainTraffic {
public static void main(String args[])
{
Runnable lights=new Lights();
Thread one=new Thread(lights);
Thread two=new Thread(lights);
Thread three=new Thread(lights);
one.setName("red");
two.setName("orange");
three.setName("green");
one.start();
two.start();
three.start();
}
}
一個問題(與多線程無關)是Lights的每個實例都使用實例'a'字段 - 換句話說,您的三個燈中的每一個都有自己的'a',因此它們彼此獨立工作。 – assylias
我如何讓他們訪問相同的值! – Chandeep
最簡單的方法是將變量'a'設爲靜態 - 但這可能不是最好的解決方案。 – assylias