这是代码......
import java.util.Scanner;
class Draft extends Thread
{
String name;
static int counter;
boolean islive; //...
// the constructor
public Draft(String name, int counter, boolean islive)
{
this.name = name;
this.counter = counter;
this.islive = islive; //...
}
void stopTheThread()
{
this.islive = false; //...
}
@Override
public void run()
{
while(islive) //...
{
counter++;
try
{
sleep(913);
}
catch (InterruptedException e) { }
}
}
// the main function
public static void main(String[] args)
{
// intializing two threads
Draft Tone = new Draft("Tone", 13, true);
Draft Ttwo = new Draft("Ttwo", 26, true);
System.out.println("All Thread Started!");
Tone.start(); Ttwo.start();
Scanner scan = new Scanner(System.in);
String go = "";
// the while loop.......
while(!go.toLowerCase().equals("exit")) {
System.out.println(); //just a new line
System.out.print("Command: ");
go = scan.next();
if(go.equals("1")) {
System.out.print("Thread one "+ Tone.counter);
}
else if(go.equals("2")) {
System.out.print("Thread wo: "+ Ttwo.counter);
}
else if(go.equals("1Stop")) {
Tone.stopTheThread(); //is not stoping
System.out.print("Thread one Stopped"); //but printing
}
else if(go.equals("2Stop")) {
Ttwo.stopTheThread(); //is not stopping too
System.out.print("Thread two Stopped"); //printing too
}
}//end of the while
}//end of main
} //end of Draft
我为Draft类扩展了Thread Class。 在 run 方法中,线程主要在 isalive 条件下在while循环上运行,这是一个布尔值。
我创建了一个方法 stopTheThread ,它将 isalive 设置为false,并且运行方法上的循环应该停止。 但实际上,当我在我的主要方法中调用 Tone & TTWO 。两者都是在main方法上创建的两个线程对象。
检查所有条件。
我做错了什么?
答案 0 :(得分:0)
看起来两个线程都在递增相同的STATIC计数器变量,因此它们都在运行并增加相同的变量。 我测试了代码并按预期工作,计数器递增直到我“停止”BOTH踏板,如果你想让每个线程增加它自己的变量,你应该删除静态修改器。