| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > synchronized |
| Автор: Platon 23.5.2007, 09:40 | ||||||
| Здравствуйте, уважаемые. Встала проблема в синхронизации.
2 сообщения, по идее должно отправляться
а шлется
и в отдельных потоках, а не в одном как хотелось бы. Что-то isWorking не успевает подняться, и все потоки благополучно запускаются, что конечно же противоречит желаемому. пробовал к этому полю синхронизированный доступ организовать, та же история, прошу помочь. |
| Автор: Platon 23.5.2007, 11:27 | ||||||
Сделаю предположение, что sendMessage synchronized, и глупо поступаю когда в конструкторе сообщаю new Thread(this) и потом стартую, выходит, что стартовать он не сможет до тех пор, пока this synchronized. и изменить isWorking соответственно не сможет, как же правильно разрулить ситуацию? я попробовал сделать
но чревато ли это чем нибудь? |
| Автор: chief39 23.5.2007, 13:12 |
| Ну, по идее, пришёл ты в сендмесседж, запустил тред. Ничего странного в том, что джвм выполнила все действия по запуску треда, а потом система решила что пора и другие треды пощёлкать. Если это произойдёт до того, как изВоркинг установится в тру - то запустится ещё раз тред. Это потому что запуск и пометка о запуске происходят у тебя не в одном синхронайзд блоке. Попробуй перенести в Сразу перед (new Thread(this)).start();. То есть ты уже в стадии запуска, ставишь а-ля свой лок на повторный запуск треда и собсно, запускаешь его следующей строчкой. Это гарантирует что никто не вклинится между тем как ты его запустил и тем, как он начал выполнять своё тело. Кроме того, ставь именно перед, чтоб он приходил в метод run с уже гарантированно установленным isWorking |
| Автор: Platon 23.5.2007, 23:12 |
| Угу, я именно так и сделал. Спасибо. |
| Автор: chief39 24.5.2007, 13:16 |
| Тогда пометь решённым |