пятница, 25 апреля 2008 г.

Java Puzzle 86: Poison-Paren Litter

Можете ли вы придумать корректное выражение, которое превращается в некорректное, если входящее в него выражение взять в скобки?

Обычно добавление пары скобок используется для улучшения читаемости кода. Однако, существует два случая, когда это не так (вспомните задачки 33 и 64).

int i = -2147483648; - корректно
int i = -(2147483648); - некорректно

long l = -9223372036854775808L; - корректно
long l = -(9223372036854775808L); - некорректно

Java Puzzle 85: Lazy Initialization

Следующему классу лень инициализировать себя обычным путём, поэтому он делает это на фоновом потоке. Что программа напечатает? Гарантируется одинаковый результат для каждого запуска?
public class Lazy {
private static boolean initialized = false;
static {
Thread thread = new Thread(
new Runnable {
public void run() {
initialized = true;
}
}
);
thread.start();
try {
thread.join();
} catch (InterruptedException ie) {
throw new AssertionError(ie);
}
}
public static void main(String[] args) {
System.out.println(initialized);
}
}

Кажется, что программа должна каждый раз печатать true, но нет! Она просто виснет.
Симпатичный deadlock. Попробую объяснить.
Понятно, что при обращении к методу main JVM начинает инициализировать класс. И только когда инициализация закончится будет вызван метод main. Во время инициализации запускается метод run. Однако, этот метод перед установкой initialized в true делает тоже проверку на то, что класс уже проинициализирован. Таким образом получается, что основной поток ждёт завершения фонового потока для завершения инициализации, а фоновый поток ждёт завершения инициализации. Вуаля!

Guitar Heroes


Скачал в интернете Guitar Heroes: Album (2007). Чисто инструментальный альбом, записанный известными финскими гитаристами:
    Timo Tolkki from Stratovarius
    Alexi Laiho from Children Of Bodom
    Roope Latvala from Children Of Bodom
    Emppu Vuorinen from Nightwish
    Esa Holopainen from Amorphis
    Nino Laurenne from Thunderstone
    Mr Crab from Bleak
    Mikko Salovaara from Kiuas
    Tuomo Louhio from Impaled Nazarene
    Sakari Hietala from Tarot
    Euge Valovirta from Godsplague
Некоторые песни очень даже цепляют. Например, Hellbilly. Впечатления, в основном, положительные. Теперь думаю, где бы диск купить. Кайлас совсем испортился...

Без очереди

Пришёл в банк погасить задолженность по кредитной карте. Там, как обычно, большая очередь. Напрягает стоять. Даже думал получить код для управления своим счётом через Интернет, хотя мне эта идея не очень нравится. Но один из сотрудников банка сказал, что при наличии паспорта и кредитной карты счёт можно погасить без очереди. Это радует...