Комментарии к записи
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();
}
}
Интересует нас как обычно вывод в консоли :)