Вы можете удалить вызов Thread.sleep()
во втором потоке subtraction
, так как это неверный способ управления выполнением потока в вашем случае.
Вам нужно использовать Thread.join
после запуска первого потока addition
, чтобы поток main
ожидал, пока поток addition
не завершится полностью и только тогда поток subtraction
будет запущен.
public class Threads extends Thread{
public static void main(String[] args) {
try {
Addition addrunner = new Addition();
addrunner.start();
addrunner.setName("addition");
addrunner.join(); //main thread waits here, until the addition thread has finished executing
Subtraction subrun = new Subtraction();
subrun.setName("subtraction");
subrun.start();
}catch (InterruptedException ie){
ie.printStackTrace();
}
}
}
class Addition extends Thread{
public void run() {
for(int i = 0; i<=20; i++) {
System.out.println("Number: " + i + " - Thread name is: " + Thread.currentThread().getName());
}
}
}
class Subtraction extends Thread{
public void run() {
for(int i = 20; i>= 0; i--) {
System.out.println("Number: " + i + " - Thread name is: " + Thread.currentThread().getName());
}
}
}
Выход:
Number: 0 - Thread name is: addition
Number: 1 - Thread name is: addition
Number: 2 - Thread name is: addition
Number: 3 - Thread name is: addition
...
Number: 19 - Thread name is: addition
Number: 20 - Thread name is: addition
Number: 20 - Thread name is: subtraction
Number: 19 - Thread name is: subtraction
...
Number: 3 - Thread name is: subtraction
Number: 2 - Thread name is: subtraction
Number: 1 - Thread name is: subtraction
Number: 0 - Thread name is: subtraction