1

我是java的初学者,我有这个代码,但是t线程只执行一次,我怎样才能使线程成为动态的?

//主程序 - 创建 2 个线程,不幸的是此时只有 1 个正在运行

public static void main(String[] args){
    timeThread ttm = new timeThread();
    ttm.name = "map";
    ttm.min = 1000;
    ttm.max = 5000;
    ttm.start();

    timeThread tta = new timeThread();
    tta.name = "arena";
    tta.min = 6000;
    tta.max = 10000;
    tta.start();
}

//我在程序中调用的时间线程

static class timeThread{
    static String name;
    static int min;
    static int max;
    static int random;
    static Thread t = new Thread () {
        public void run () {
            while (true){
                random = genRandomInteger(min,max);
                System.out.println("Thread named: " 
      + name + " running for: " 
      + random + " secconds...");
                try {
                    Thread.sleep(random);
                } catch(InterruptedException ex) {
                    Thread.currentThread().interrupt();
                }   
            }
        }
    };
    void start(){
        t.start();
    }
}

//随机函数生成器

  private static int genRandomInteger(int aStart, int aEnd){
    int returnValue = aStart + (int)(Math.random() 
* ((aEnd - aStart) + 1));
    return returnValue;
}
4

1 回答 1

4

您正在静态初始化线程!这意味着它在加载类时创建一次。

您的代码完全按照其编写的目的执行。

您必须修改您的TimeThread类:删除静态关键字并使变量成为类成员。像这样:

static class TimeThread implements Runnable {
    String name;
    int min;
    int max;
    int random;
    Thread t;

    public void run () {
        while (true){
            random = genRandomInteger(min,max);
            System.out.println("Thread named: " + name + " running for: " 
                               + random + " secconds...");
            try {
                Thread.sleep(random);
            } catch(InterruptedException ex) {
                Thread.currentThread().interrupt();
            }   
        }
    }

    void start(){
        t = new Thread (this);
        t.start();
    }
}

更多提示:

  • 将线程初始化代码放在一个方法中。
  • 不要使用匿名类,将run()方法写入TimeThread并传递thisThread构造函数
  • 使用 getter 和 setter,它们被认为是好的做法
  • 学习更多关于java编程的知识......从我在你的代码中看到的,你根本不应该接触线程。
  • 你的“竞选”文本实际上显示了一个随机数......它真的不应该。
于 2013-09-01T06:43:16.950 回答