Всем привет! Я пока плохо понимаю нити, поэтому решил придумать сам себе задачу чтобы разобраться. Идея программы: • Создаем внешнюю нить OuterThread из которой вызываем 2 других нити – Egg и Chicken. • Потом OuterThread засыпает на 5 секунд, чтобы передать управление Egg и Chicken. • Egg и Chicken должны спорить между собой о том, кто появился раньше. Каждая нить должна высказывать об этом и потом засыпать на время случайный промежуток времени time. • После того как 5 секунд сна OuterThread истекли, OuterThread должна определить какая нить из двух - Egg или Chicken сейчас НЕ спит и признать ее победителем Проблема в том, что вызванная первой нить Egg монополизирует управление и не даже засыпая не хочет отдавать управление нити Chicken. Подскажите, пожалуйста, как исправить ошибку?
public class MyChickenEgg {

    public static void main(String[] args) {

        Egg egg = new Egg();
        Chicken chicken = new Chicken();

        OuterThread outer = new OuterThread(egg, chicken);
    }

    public static int time(){
        double proxy = Math.random();
        int time  = (int) Math.round(proxy*100);
        return time;
    }




    public static class OuterThread extends Thread{
        private Egg t1;
        private Chicken t2;

        OuterThread(Egg t1, Chicken t2){
            super();
            this.t1 = t1;
            this.t2 = t2;
            start();
        }

        public void run(){
            try{
                t1.run();
                t1.sleep(MyChickenEgg.time());
                t2.run();
                t2.sleep(MyChickenEgg.time());
                Thread.sleep(5000);

                if (t1.isAlive()){
                    System.out.println("Победила " + t1.name);
                    t1.interrupt();
                    t2.interrupt();
                }else{
                    System.out.println("Победила " + t2.name);
                    t1.interrupt();
                    t2.interrupt();
                }

            }catch (InterruptedException e){


                System.out.println("Нити кончились!");
            }
        }

    }





    public static class Egg extends Thread{
        private String name = "Яичко";
        private int Ttime = 0;

        private static boolean marker = false;
        @Override
        public void run() {
            try {
                while (!marker){
                    System.out.println("Раньше появилось яйцо!");
                    Ttime = MyChickenEgg.time();
                    sleep(Ttime);
                    System.out.println("Задержка на " + Ttime);

                }
            }catch (InterruptedException e){}
        }
    }


    public static class Chicken extends Thread{
        public String name = "Курочка";

        private static boolean marker = false;

        public void run() {
           try {
               while (!marker){
                   System.out.println("Раньше появилась курица!");
                   Thread.sleep(MyChickenEgg.time());
               }
           }catch (InterruptedException e){}
        }
    }

}