Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Сколько времени спит трэд?


Автор: Antropoid 3.10.2006, 08:50
пусть есть
Код

synchronized(obj) {
    try {        
        wait(30000);
    } catch(InterruptedException ie) {
    }        
}            

пусть другой трэд сделал
Код

оbj.notify();

Можно ли узнать сколько времени спал трэд?

Автор: batigoal 3.10.2006, 09:16
Можно попробовать обычным способом, с помощью Date. Но не уверен, хорошая ли будет точность при маленьких интервалах.

Автор: LSD 3.10.2006, 09:49
Цитата(Antropoid @  3.10.2006,  09:50 Найти цитируемый пост)
Можно ли узнать сколько времени спал трэд?

Нет, и даже нельзя узнать почему тред пробудился из-за таймаута или из-за notify.

Автор: Antropoid 3.10.2006, 12:54
LSD, мне казалось, что batigoal прав -->
Код

        Date d = new Date();
        long before = d.getTime();
        System.out.println("1_date = " + before);
        
        synchronized(this) {
            try {
                wait(10000);
            } catch(InterruptedException ie) {
            }
        }        
        d = new Date();
        long after = d.getTime() - before;
        System.out.println("2_date = " + after);

Автор: LSD 3.10.2006, 13:17
Прав в чем? Если ты получишь что ты ждал 100 миллисекунд вместо 10000, то тогда понятно что был вызван notify(). А вот если ты получишь 10008, толи ты по таймауту вышел, то ли в последний момент кто-то вызвал notify(). Если от того был вызван notify() или нет, зависит логика программы, то надо обязательно вводить флаг.

P.S. Вместо:
Код
Date d = new Date();
long before = d.getTime();

лучше сразу писать:
Код
long before = System.currentTimeMillis();

Автор: batigoal 3.10.2006, 13:30
Если у нас вопрос
Цитата(Antropoid @  3.10.2006,  09:50 Найти цитируемый пост)
Можно ли узнать сколько времени спал трэд? 

, то нам ведь не важно, по каким именно причинам он проснулся.

Автор: COVD 3.10.2006, 17:18
Если поставить малое время, например, wait(30), то поток может сам проснуться и через 60.

Автор: Antropoid 3.10.2006, 22:48
Ладно, т.к. вопрос был 
Цитата(Antropoid @  3.10.2006,  08:50 Найти цитируемый пост)
Можно ли узнать сколько времени спал трэд?

, то считаю его решенным (правда, действительно, при описанном выше подходе возникают погрешности, но от этого, на сколько я понял, - никуда...)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)