четверг, 13 марта 2008 г.

Java Puzzle 76: Ping Pong

Следующая программа содержит синхронизированные статические методы. Что она напечатает? Гарантируется ли её результат от запуска к запуску?
public class PingPong {
public static synchronized void main(String[] args) {
Thread thread = new Thread() {
public void run() {
pong();
}
};
thread.run();
System.out.print("Ping");
}
static synchronized void pong() {
System.out.print("Pong");
}
}

Начнём с того, что синхронизировав статические методы мы добились того, что результат программы гарантируется от запуска к запуску. Но почему она пишет PongPing вместо PingPong?
Типичная ошибка и простая невнимательность. Для запуска отдельного потока надо вызывать метод start, а не метод run. В нашем случае всё действие происходит на одном потоке.
Будьте внимательны!

Комментариев нет:

Отправить комментарий