Я попросил выполнить несколько потоков - 3 потока, которые будут "бегунами" в гонке, и нажатие ENTER завершит один из потоков и вернет время, которое потребовалось ему для запуска.
Поэтому я сделал этот код -
Класс бегуна:
import java.util.*;
public class Runner extends Thread {
Date startDate;
long startTime;
String name;
private volatile boolean flag = true;
//This method will set flag as false
Runner(String name)
{
this.name = name;
}
public void stopRunning()
{
flag = false;
}
@Override
public void run()
{
this.startDate = new Date();
this.startTime = this.startDate.getTime();
System.out.println(startTime);
while (flag)
{
}
Date d = new Date();
System.out.println(this.name + " Stopped Running....");
System.out.println("The time that passed is " + Long.toString((d.getTime()-this.startTime)/1000) + " secondes" );
}
}
Основной:
import java.io.*;
public class Main {
public static void main(String args[])
{
Runner run1 = new Runner("run1");
Runner run2 = new Runner("run2");
Runner run3 = new Runner("run3");
run1.start();
run2.start();
run3.start();
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
run1.stopRunning();
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
run2.stopRunning();
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
run3.stopRunning();
}
}
Кодпросто создайте 3 потока Runner, после чего он ожидает ввода ENTER (в моих тестах кода мне, как ни странно, приходилось получать ввод 2 раза для каждого ENTER вместо 1) после получения ввода ENTER функция stopRunning потока включена иостановка потока.
Моя проблема в том, что когда я запускаю его (на затмении), он тратит на java около 5 секунд, чтобы выполнить thread.run () для всех трех потоков, НО, когда я его тестировал, я обнаружил, что еслиЯ добавляю цикл while (flag) к классу Runner, простой вывод, такой как System.out.println (this.name), он работает нормально, а java / eclipse компилируется и запускает его немедленно
Кто-то знает, что объяснить мнечто случилось или какМогу ли я добавить это без добавления этой строки?
Большое спасибо,
Омер