Как я понял по тому примеру у каждого треда есть свой номер- обьект1, обьект 2. Для второго треда надо просто скопировать new java/lang/Thread ... или что то изменить? Потом после первого треда написать обьект2 потом run. Больше не чего не надо писать?
DDDEN!SSS, сначала создаешь объект Thread, потом вызываеш Thread.start(), запускается метод run(), который прописан в потоке. Если просто вызвать run(), от этого новый поток не образуется.
Не понял какая разница между запускаеш и вызываеш run? Я всегда пишу .method public run()V я так понимаю это вызывается метод, а как его запустить. все треды начинаются с метода с одним и темже названием ? Вообще возможно сделать в одном классе несколько тредов не делая при этом други классов для треда? как в примере 2Theads
DDDEN!SSS, большая разница! Поток создается Java-машиной, если она получает команду Thread.start(), то она запускает метод run() в отдельном потоке. А если ты просто вызовешь метод run(), то он и начнет выполняться, как самый обычный метод, от этого новый поток не образуется, поскольку JVM не получила никакой команды. Другой класс, который расширяет Thread, можно не создавать, но тогда нужно в каком-то классе реализовать интерфейс Runnable и создать новый экземпляр класса Thread с указанием созданного Runnable в конструкторе (то есть Thread(Runnable r)) и запустить через Thread.start(). Это второй способ создания потока.
Я имел в виду разница в написании нетода, как я понял писать метод run всегда одинаково только для запуска надо это написать new java/lang/Thread dup aload_0 invokespecial java/lang/Thread/<init>(Ljava/lang/Runnable;)V putstatic Graph/T Ljava/lang/Thread; getstatic Graph/T Ljava/lang/Thread; invokevirtual java/lang/Thread/start()V . что бы сделать новый поток надо сделать новую перемено .field public static T Ljava/lang/Thread; ?
DDDEN!SSS, в run() ты пишешь, что хочешь. Там твой код, который начнет выполняться в другом потоке. В принципе, можно новую переменную и не создавать, если создать новый объект Thread и сразу запустить его методом start(). На Java это выглядит примерно так: new Thread(Runnable r).start(). Но вот как это написать в байт-кодах, я не возьмусь сказать наверняка. К тому же в этом случае над потоком потеряется контроль, поскольку не будет ссылки на объект самого потока. Иногда такой контроль нужен, иногда нет, в принципе, можно обратно вернуть на поток ссылку. Но если заранее известно, что нужен какой-то контроль надо потоком, то стоит сразу поместить ссылку на поток в какое-нибудь поле, как ты и написал.
Я написал если шарик на краю экрана то что бы он за экран не выкатывался при падении или управлении. Но часто бывает что он соровно выкатывается тоести если y I=176 то перейти на метку НЕ ВЫПОЛНЯЕТСЯ. Почему это происходит? И это можно как то исправить?
Malcolm, вот управление шариком в Main.class upwap.ru/40476 только в этом коде я удолил пару строчек которые пытались поднять шарик когда он был на такойже высоте как и линия. Но в право сейчас соровно проскакивает. От чего это зависит.
15 мая 2008 в 18:40