Форум русскоязычного сообщества Ubuntu


За новостями русскоязычного сообщества и Ubuntu в целом можно следить на нашей страничке в Google+

Автор Тема: Приоритет потоков (Java)  (Прочитано 2258 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн XFreedomX

  • Автор темы
  • Новичок
  • *
  • Сообщений: 27
  • Freedom in Me
    • Просмотр профиля
Приоритет потоков (Java)
« : 12 Июнь 2007, 13:08:52 »
Ubuntu - это неприоритетная  операционная система?
 Создаю подряд 3 потока, у всех одинаковый приоритет (дефолтовый = 5), так вот сначала выполняется первый поток целиком, затем целиком второй и затем целиком третий. Ставлю приоритет третьему = 9, запускаю, ничего не меняется.... сначала первый, потом второй, потом третий. Т.е. получается в Ubuntu приоритет не действует?
Жизнь учит, но не всегда хорошему.

Оффлайн bad_duck

  • Участник
  • *
  • Сообщений: 109
  • Бледнолицый друг пингвинов
    • Просмотр профиля
Re: Приоритет потоков (Java)
« Ответ #1 : 12 Июнь 2007, 16:46:37 »
А может быть первые два успевают отработать за выделенное им время? В какой последовательности создаются потоки?

Оффлайн Zenom

  • Новичок
  • *
  • Сообщений: 7
  • робофилософ
    • Просмотр профиля
Re: Приоритет потоков (Java)
« Ответ #2 : 15 Июнь 2007, 21:57:44 »
Покажите код. Есть у меня одно подозрение, но без просмотра кода я не уверен.

Оффлайн Viewizard

  • Активист
  • *
  • Сообщений: 481
    • Просмотр профиля
Re: Приоритет потоков (Java)
« Ответ #3 : 16 Июнь 2007, 11:31:27 »
Не знаю как на яве, я на с++ пишу... но ты отпускаешь поток?
Т.е. если ты грубо делаешь замкнутый цикл внутри потока, то стоит попробовать сделать хотябы 1 милисекундный слип в этом цикле, чтобы ось могла переключиться на другие потоки и соотв. уже смотреть на приоритеты...
Обходя разложенные грабли, ты теряешь драгоценный опыт!

Оффлайн Zenom

  • Новичок
  • *
  • Сообщений: 7
  • робофилософ
    • Просмотр профиля
Re: Приоритет потоков (Java)
« Ответ #4 : 16 Июнь 2007, 11:56:46 »
стоит попробовать сделать хотябы 1 милисекундный слип в этом цикле, чтобы ось могла переключиться на другие потоки и соотв. уже смотреть на приоритеты...
За такое надо линейкой по пальцам. Для передачи управления другому потоку везде есть специальные методы. В Java --- это Thread.yield() В модели pthread --- sched_yield() Ну и т. д.

Собственно, мои подозрения и сводятся к тому, что не вызывается Thread.yield() и/или блокирующие методы типа read()

Оффлайн Viewizard

  • Активист
  • *
  • Сообщений: 481
    • Просмотр профиля
Re: Приоритет потоков (Java)
« Ответ #5 : 16 Июнь 2007, 12:32:40 »
В общем смысл мною сказанного надеюсь был понятен, а как реализовать - это уже другое дело. :)
Я смотрю человек что-то молчит, может уже сам разобрался...

З.Ы. я сам задействую потоки через SDL, и для игр... а там специфика и реализации несколько иные...
« Последнее редактирование: 16 Июнь 2007, 12:34:39 от Viewizard »
Обходя разложенные грабли, ты теряешь драгоценный опыт!

Оффлайн XFreedomX

  • Автор темы
  • Новичок
  • *
  • Сообщений: 27
  • Freedom in Me
    • Просмотр профиля
Re: Приоритет потоков (Java)
« Ответ #6 : 20 Июнь 2007, 23:58:41 »
Извините, что так пропал, не было возможности ответить. Проблему решил :-), но непонемание осталось. Как-нибудь проведу эксперимент и отпишусь :-). Проблема была в следующем: У меня от одного классаPotok p1 = new Potok("One potok"); Potok p2 = new Potok("Two potok"); создавалось 3 потока, у всех потоков одинаковый приоритет, убрав все для проверки run() стал таким:
public void run()
    {
        for(int i = 0; i < 5; i++)
        {
            System.out.println("Thread name : " + t.getName() + " it's number : " + (i+1));
            try{ t.sleep(2000); }
            catch(InterruptedException e){System.out.println(e);}
        }
    }
и выводилось так, как было написано выше.
Жизнь учит, но не всегда хорошему.

 

Страница сгенерирована за 0.053 секунд. Запросов: 24.