Реализуйте многопоточность, унаследовав класс Thead:
Преимущества: Простота написания. Если вам нужен доступ к текущему потоку, просто используйте его вместо метода Thead.currentThread().
Недостаток: поскольку этот класс потока унаследовал класс Thead, он не может наследовать другие классы.
Пример кода:
Скопируйте код кода следующим образом:
пакет org.frzh.thread;
общественный класс FirstThread расширяет Thread {
частный int я;
//Перепишем метод run. Тело метода run — это тело выполнения потока.
общественный недействительный запуск () {
для (; я < 100; я++) {
//Когда класс потока наследует класс Thread, вы можете напрямую вызвать метод getName, чтобы получить имя текущего потока.
//Если вы хотите получить текущий поток, используйте его напрямую
//Метод getName объекта Thread возвращает имя текущего потока
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args) {
для (int я = 0; я <100; я++) {
//Вызов метода currentThread Thead, чтобы получить текущий поток
System.out.println(Thread.currentThread().getName() + " " +i);
если (я == 20) {
новый FirstThread().start();
новый FirstThread().start();
}
}
}
}
Запуск фрагмента результата:
Мы обнаружили, что значения i в двух подпотоках не являются непрерывными, что кажется несовместимым с тем, что мы говорили о прямом совместном использовании данных подпотоками. Фактически, здесь мы создаем экземпляры двух подпотоков, каждый со своей собственной переменной экземпляра i.
Использование многопоточности, реализующей интерфейс Runable:
Преимущества: класс потока реализует только интерфейс Runable, поэтому он также может наследовать другие классы;
В этом случае несколько потоков могут совместно использовать целевой объект, поэтому очень удобно, чтобы несколько потоков обрабатывали один и тот же ресурс, чтобы можно было разделить ЦП, код и данные для формирования четкой модели и лучшего отражения объектно-ориентированного мышления. .
Недостатки: Программирование немного сложное. Если вы хотите получить доступ к текущему потоку, вы должны использовать метод Thread.currentThread.
Пример кода:
Скопируйте код кода следующим образом:
пакет org.frzh.thread;
общественный класс SecondThread реализует Runnable{
частный int я;
@Override
общественный недействительный запуск () {
// TODO Автоматически сгенерированная заглушка метода
для (; я < 100; я++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
public static void main(String[] args) {
для (int я = 0; я <100; я++) {
System.out.println(Thread.currentThread().getName() + " " + i);
если (я == 20) {
SecondThread st = новый SecondThread();
новый поток(st, "дочерний поток 1").start();
новый поток(st, "дочерний поток 2").start();
}
}
}
}
Запуск фрагмента результата:
Видно, что значение i в это время постоянно меняется, поскольку потоки 1 и 2 имеют одну и ту же цель.