Прежде чем приступить к статье, давайте рассмотрим вопрос: какие существуют способы создания потоков на следующем рисунке, и каковы различия и связи между ними?
Как создать нить
Класс потока Java также является классом Object, и его экземпляры наследуются от java.lang.Thread или его подклассов. Поток можно создать в java следующим образом:
Thread thread = new Thread();
thread.start();
Однако поток, созданный таким образом, будет выполнен быстро, потому что содержимое, выполняемое потоком, пусто.Если потоку необходимо выполнить пользовательский код, Есть два способа добиться этого: один — наследовать класс Thread и переопределить метод run, чтобы поместить содержимое выполнения потока в метод run, другой — реализовать интерфейс Runable и передать класс, реализующий интерфейс Runable, в метод run. Класс потока как параметр. Из-за появления анонимных внутренних классов и Java8 Lambda у этих двух методов есть свои варианты, но они остались прежними.
Наследовать от класса Thread
Первый метод заключается в наследовании класса Thread и переопределении метода родительского класса с помощью пользовательского метода запуска для передачи кода выполнения потока:
public class MyThread extends Thread {
@Override
public void run(){
System.out.println("MyThread running");
}
}
MyThread myThread = new MyThread();
myThread.start();
Наследование класса Thread - запись анонимного внутреннего класса
Для тех кодов, которые нужно создать только один раз, также очень проблематично каждый раз определять MyThread, поэтому существует вариант анонимного внутреннего класса:
//匿名内部类
Thread thread = new Thread(){
@Override
public void run(){
System.out.println("Thread Running");
}
};
thread.start();
//还可以更简化
new Thread(){
@Override
public void run(){
System.out.println("Thread Running");
}
}.start();
Реализовать интерфейс Runable
Другой способ создать несколько потоков — реализовать интерфейс Runable и передать класс, реализующий интерфейс Runable, в качестве параметра классу Thread, чтобы передать поток для выполнения кода:
public class MyRunnable implements Runnable {
public void run(){
System.out.println("MyRunnable running");
}
}
Thread thread = new Thread(new MyRunnable());
thread.start();
Реализовать интерфейс Runable - анонимный внутренний класс
Опять же, мы можем упростить код, используя анонимные внутренние классы:
//匿名内部类
Runnable myRunnable = new Runnable(){
public void run(){
System.out.println("Runnable running");
}
}
Thread thread = new Thread(myRunnable);
thread.start();
//还可以更简化
new Thread( new Runnable(){
@Override
public void run(){
System.out.println("Runnable running");
}
}).start();
Реализация интерфейса Runable — лямбда-выражения
Что ж, код здесь очень упрощен, но давайте еще раз посмотрим на этот код:
На самом деле, кромеSystem.out.println("Runnable running");Это код шаблона, который нам нужно выполнить, кроме тела потока, так почему же мы передаем весь класс, чтобы передать строку действительно полезного кода? Java8 предлагает идею функционального программирования, которое может напрямую передавать функцию в качестве параметра методу и может использовать лямбда-выражения для упрощения выражения функций.Потоки, созданные лямбда-выражениями, следующие:
new Thread(() -> {
System.out.println("Thread Running");
}).start();
Суммировать
Следующий рисунок обобщает способ создания потоков.Конечно, в практических приложениях мы больше используем пулы потоков для создания потока, но эти основы также неразделимы.Важнее идея.Хорошо, мы напишем о потоке бассейн в будущем до свидания.
Спасибо за прочтение, если что-то получится, пожалуйста
点赞, попрошайничество关注Пусть больше людей увидят эту статью, эта статья была впервые опубликована в технической публичной учетной записи, которая не ограничивается технологиями.Nauyus, добро пожаловать, чтобы определить QR-код ниже, чтобы получить больше контента, в основном делиться оригинальными техническими продуктами, такими как JAVA, микросервисы, языки программирования, архитектурный дизайн, мышление и познание, и запускать режим еженедельного обновления с декабря 2019 года. Добро пожаловать, чтобы обратить внимание и присоединяйтесь к Науюс учиться.
Преимущество 1: Видеоруководство по бэкенд-разработке
Десятки наборов видеоруководств по бэкенд-разработке JAVA, собранных за годы, включая микросервисы, распределенные, Spring Boot, Spring Cloud, шаблоны проектирования, кэширование, настройку JVM, MYSQL, крупномасштабные распределенные боевые проекты электронной коммерции и другой контент, Следуйте за Наюсом и немедленно ответьте на [Видеоурок].
Welfare 2: Пакет и загрузка вопросов для интервью
Сводка ресурсов с вопросами для собеседований, собранных за прошедшие годы, включая руководства по поиску работы, навыки прохождения собеседований и сводку вопросов для собеседований от Microsoft, Huawei, Ali, Baidu и других компаний. В этой части еще разбираются, можете продолжать обращать внимание. Немедленно следуйте за Наюсом, чтобы ответить на [Вопросы интервью]. Нет никакой процедуры, чтобы получить это.