Класс потоков содержит методы start () и run (). Эта глава ответит на это. Содержание этой главы включает в себя:
Описание разницы между start () и run ()
Пример разницы между start () и run ()
Исходный код, связанный с start () и run () (на основе JDK1.7.0_40)
Описание разницы между start () и run ()
start (): его функция - запустить новый поток, а новый поток выполнит соответствующий метод run (). start () не может быть вызван неоднократно.
run (): run () можно называть многократно, как обычные методы участника. Если вы вызовите run () отдельно, run () будет выполнен в текущем потоке, а новый поток не будет запущен!
Ниже приведен код для объяснения.
Кода -копия выглядит следующим образом:
класс Mythread Extends Thread {
public void run () {
...
}
};
Mythread mythread = new mythread ();
mythread.start () запускает новый поток и запускает метод run () в новом потоке.
Mythread.run () будет запускать метод run () непосредственно в текущем потоке и не запустит новый поток для run ().
Пример разницы между start () и run ()
Ниже продемонстрируйте разницу между ними с простым примером. Исходный код заключается в следующем:
Кода -копия выглядит следующим образом:
публичный синхронизированный void start () {
// Если поток не «готов», исключение брошено!
if (ThreadStatus! = 0)
бросить новый allodalThreadStateException ();
// Добавить поток в Threadgroup
Group.Add (это);
логический запуск = false;
пытаться {
// запустить поток через start0 ()
start0 ();
// Установить тег запуска
начал = true;
} окончательно {
пытаться {
if (! Начнется) {
Group.ThreadStartFailed (это);
}
} catch (бросание игнорировать) {
}
}
}
Результаты работы:
Кода -копия выглядит следующим образом:
Главный звонок mythread.run ()
Главный работает
Главный звонок mythread.start ()
Mythread работает
Результаты Описание:
(01) Thread.currentThread (). GetName () - это имя, используемое для получения «текущего потока». Текущий поток относится к потоку, который должен выполняться в процессоре.
(02) mythread.run () называется «Main Thread Main», а метод run () работает непосредственно в «Main Thread Main».
(03) Mythread.start () запускает «Поток Mythread».
Исходный код, связанный с start () и run () (на основе JDK1.7.0_40)
Исходный код метода start () в Thread.java выглядит следующим образом:
Кода -копия выглядит следующим образом:
публичный синхронизированный void start () {
// Если поток не «готов», исключение брошено!
if (ThreadStatus! = 0)
бросить новый allodalThreadStateException ();
// Добавить поток в Threadgroup
Group.Add (это);
логический запуск = false;
пытаться {
// запустить поток через start0 ()
start0 ();
// Установить тег запуска
начал = true;
} окончательно {
пытаться {
if (! Начнется) {
Group.ThreadStartFailed (это);
}
} catch (бросание игнорировать) {
}
}
}
Примечание: start () фактически запускает поток через локальный метод start0 (). start0 () запустит новый поток, а новый поток вызовет метод run ().
Кода -копия выглядит следующим образом:
Частный родной void start0 ();
Код run () в Thread.java выглядит следующим образом:
Кода -копия выглядит следующим образом:
public void run () {
if (target! = null) {
target.run ();
}
}
Описание: Цель - это выполняемый объект. run () должен напрямую вызовать метод run () запускаемого члена потока потока и не будет создавать новый поток.