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)? Я экспериментально понял, что не разницу в миллисекундах, а чему тогда равно возвращаемое значение?