我创建的线程对象的调用方法但是不起作用。没有错误

时间:2017-09-22 12:40:19

标签: java multithreading methods constructor boolean

这是代码......

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方法上创建的两个线程对象。

检查所有条件。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

看起来两个线程都在递增相同的STATIC计数器变量,因此它们都在运行并增加相同的变量。 我测试了代码并按预期工作,计数器递增直到我“停止”BOTH踏板,如果你想让每个线程增加它自己的变量,你应该删除静态修改器。