package com.javarush.task.task16.task1605;
import java.util.Date;
/*
Поговорим о музыке
*/
public class Solution {
public static int delay = 1000;
public static void main(String[] args) {
Thread violin = new Thread(new Violin("Player"));
violin.start();
}
public static void sleepNSeconds(int n) {
try {
Thread.sleep(n * delay);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public interface MusicalInstrument extends Runnable {
Date startPlaying();
Date stopPlaying();
}
public static class Violin implements MusicalInstrument{
private String owner;
public Violin(String owner) {
this.owner = owner;
}
public Date startPlaying() {
System.out.println(this.owner + " is starting to play");
return new Date();
}
public Date stopPlaying() {
System.out.println(this.owner + " is stopping playing");
return new Date();
}
@Override
public void run() {
Date begin = startPlaying();
sleepNSeconds(1);
Date end = stopPlaying();
//System.out.printf("Playing %d ms", end.compareTo(begin));
System.out.printf("Playing " + (end.getTime()-begin.getTime()) + " ms");
}
}
}
1) Почему при запуске второй нити violen, которая усыпляет главный поток на 1 секунду, засыпает и сама violen? Почему происходит пауза во втором потоке, ведь по идее он должен отработать без остановок, засыпает ведь только главный поток.
2) Что возвращает метод end.compareTo(begin)? Я экспериментально понял, что не разницу в миллисекундах, а чему тогда равно возвращаемое значение?Станислав Future
39 уровень
Почему засыпает дочерняя нить?
Решен
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Алексей
25 мая 2022, 23:53решение
Sleep статический метод, он останавливает поток в котором запущен.
Compare сравнивает объекты. Проще говоря, какой из них больше, а не считает их разницу. Почитайте про компаратор.
+2