***

Jul 10, 2012 21:11

Комментарии к записи http://olegg-lieangel.livejournal.com/66137. навеяли мне задачку, которая может стать интересной темой для разговора.

Горячему кандидату я бы подкинула ее в следующем виде:

public class Main {
    public static void main(String... args) {
        try {
            Integer i = 2;
            synchronized (i) {
                Thread th = new Thread() {
                    public void run() {
                        Integer j = 2;
                        System.out.println("UP1!");
                        synchronized (j) {
                            System.out.println("UP2!");
                        }
                    };
                };
                th.start();
                th.join(); <-- join и try\catch кста можно убрать и просто поговорить на тему определен ли порядок вывода строк в данном примере 
                System.out.println("UP3!");
            }
        } catch (InterruptedException e) {
        }
    }
}Прочим в более очевидном виде. Правда меня смущает длина кода :) Но зато легко и без знаний догадаться :))
public class Test {
    static class TestThread1 extends Thread {
        @Override
        public void run() {
            try {
                Integer num = 5;
                String str = "string"; 
                synchronized (num) {
                    System.out.println("Thread1: check 1");
                    sleep(10);
                    synchronized (str) {
                        System.out.println("Thread1: check 2");
                    }
                }
                System.out.println("Thread1: done");
            } catch (InterruptedException e) {
            }
        }
    }

static class TestThread2 extends Thread {
        @Override
        public void run() {
            try {
                Integer num = 5;
                String str = "string";
                synchronized (str) {
                    System.out.println("Thread2: check 1");
                    sleep(10);
                    synchronized (num) {
                        System.out.println("Thread2: check2");
                    }
                }
                System.out.println("Thread2: done");
            } catch (InterruptedException e) {
            }
        }
    }

public static void main(String... args) {
        TestThread1 th1 = new TestThread1();
        TestThread2 th2 = new TestThread2();

th1.start();
        th2.start();
    }
}

Интересует нас как обычно вывод в консоли :)

Собеседования, Работа

Previous post Next post
Up