Я пытаюсь сделать программу с 2 гонщиками, и она продолжает давать мне IllegalThreadStateException - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть 2 потока и основной класс в моей программе, и всякий раз, когда я пытаюсь запустить его, один поток дает мне исключение IllegalThreadStateException, и я не уверен, почему. Программа должна совершать гонки на черепахах и зайцах, черепаха может двигаться на 10 метров и никогда не останавливаться, пока не достигнет 300 метров, а заяц может двигаться на 100 метров, но ему нужно отдыхать 90% времени. Ниже приведен мой код, если кто-то может мне помочь, я был бы признателен. Кроме того, когда я запустил его, поток Hare просто выводит Hare: 0 миллионов раз, поэтому я не уверен, почему это происходит.

Основной класс:

package runnerthread;

public class RunnerThread extends Thread{

    public static void main(String[] args) {
       System.out.println("Get set...Go!");
        int hPosition = Hare.position;
        int tPosition = Tortoise.position;
        Thread hare = new Thread(new Hare());
        Thread tortoise = new Thread(new Tortoise());
        try{
       while(hPosition<300 && tPosition<300){
           tortoise.start();
           hare.start();
           Thread.sleep(300);
       }
        }catch(InterruptedException e){}
}
}

Черепаховая нить:

public class Tortoise extends Thread {
    static int position;
    static int speed = 10;
    @Override
    public void run(){
            position = speed + 10;
        System.out.println("Tortoise: "+position);
    }
}

Нить зайца:

import java.util.Random;


public class Hare extends Thread{
     static int position;
    int speed = 100;
    int restingPercent = 90;
    Random random = new Random();
        int randomNum = random.nextInt((100-1)+1) + 1;
    @Override
    public void run(){
    while(position<300){
    if (randomNum<=restingPercent){
        System.out.println("Hare: "+position);
    }else {
        position+=100;
        System.out.println("Hare: "+position);
    }
}
}
}

1 Ответ

0 голосов
/ 10 ноября 2018

Вы не можете вызывать запуск более одного раза в потоке. Объекты потока не могут быть повторно использованы. Вы можете использовать Runnable для этой цели. Для получения дополнительной информации проверьте этот ответ: https://stackoverflow.com/a/2324114/10632970

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...