Вы можете войти в дверь за три минуты с многопоточностью!

Java задняя часть JVM Операционная система

предисловие

Потратил неделю на просмотр коллекций Java, прежде чем:

Прежде чем писать статью, я прочитал главу о параллелизме в «Java Core Technology Volume 1» и предыдущую часть «Java Concurrent Programming Practice», а также просмотрел написанные ранее заметки. С сегодняшнего дня я войду в точку знаний о многопоточности~

Я очень серьезно относился к изучению основ многопоточности, когда раньше изучал основы Java, но я не стал повторять это позже, и со временем почти забыл об этом. Я никогда не использовал многопоточность в обучении. JavaWeb (Сделал что-то слишком водянистое...).

Так как на эту часть собеседования приходится большая доля, а изучение многопоточности тоже очень поможет мне в будущем совершенствования (я так думаю).

На самом деле, я также эквивалентен изучению многопоточности с нуля.Если в статье есть ошибки, пожалуйста, добавьте больше и не стесняйтесь исправлять меня в области комментариев~~

Во-первых, первое понимание многопоточности

1.1 Знакомство с процессом

Говоря о тредах, я должен снова упомянуть процесс ~

Вероятно, мы очень хорошо знаем этот процесс.Откройте диспетчер задач в Windows, и вы обнаружите, что все программы, которые мы запускаем в операционной системе, являются процессами:

Определение процесса:

процессодно выполнение программы, процесс - это то, что происходит, когда программа и ее данные последовательно выполняются на процессоре.Мероприятия, процесс — это процесс, в котором программа с независимыми функциями работает с набором данных, это системный ресурсНезависимая единица распределения и планирования

  • Процесс — это независимая единица распределения ресурсов и планирования в системе. Каждый процесс имеет собственное пространство памяти и системные ресурсы.

1.2 Вернуться к теме

Тогда в системе есть понятие процесса, и процесс уже может выделять и планировать ресурсы.Зачем даже нить??

Чтобы программа выполнялась одновременно, система должна выполнить следующий ряд операций:

  • (1)создать процесс, когда система создает процесс, она должна выделить для него все необходимые ресурсы, кроме процессора, такие как пространство памяти, устройства ввода/вывода, и создать соответствующие печатные платы;
  • (2)отменить процесс, когда система отменяет процесс, она должна сначала выполнить операцию рециркуляции на занятых им ресурсах, а затем отменить печатную плату;
  • (3)переключатель процессаПри переключении процесса вам необходимо сохранить среду ЦП текущего процесса, установить среду ЦП вновь выбранного процесса, поэтому много машинного времени процесса.

Можно видеть, что когда процесс реализует планирование, диспетчеризацию и переключение процессов в многопроцессорной среде,нужно тратить много времени и места наверху

Внедрение потоков в основном предназначено для повышения эффективности выполнения системы, сокращения времени простоя процессора и времени переключения планирования, а также облегчения управления системой. ** Улучшение параллелизма в ОС

  • Проще говоря:многопроцессорность процессовОчень интенсивно использует ЦП, и мыПредставляем поток как базовую единицу планирования и диспетчеризации(Заменяет некоторые основные функции процесса **[Планирование]**).

Так где треды? ? Например:

Это:Несколько задач могут выполняться в одном процессе, и я вижу, что каждая задача представляет собой поток..

  • так:Процесс имеет один или несколько потоков!

1.3 Процессы и потоки

Итак, мы можем сделать вывод:

  • процесс как ресурсраспространятьосновная единица
  • поток как ресурсрасписаниеосновная единицаисполнительная единица программы, путь выполнения(Однопоточный: один путь выполнения, многопоточный: несколько путей выполнения). Это самая основная единица программы, использующая ЦП.

нить имеет3 основных состояния:

  • выполнить, готово, блокировка

нить имеет5 основных операций:

  • Вилка, Блокировка, Активация, Отправка, Конец

Свойства потока:

  • 1) Легкие сущности;
  • 2) Базовый блок самостоятельного планирования и назначения;
  • 3) могут выполняться одновременно;
  • 4) Общие ресурсы процесса.

нить имеетдва основных типа:

    1. Поток уровня пользователя: Весь процесс управления выполняется пользовательской программой,Ядро в операционной системе только управляет процессом.
    1. поток системного уровня(потоки основного уровня):Управляется ядром операционной системы. Ядро операционной системы предоставляет соответствующие системные вызовы и API интерфейса прикладных программ для прикладных программ, так что пользовательские программы могут создавать, выполнять и отменять потоки.

Стоит отметить, что наличие многопоточности не улучшает скорость выполнения программы. фактическизаключается в увеличении использования приложения, выполнение программы фактически находится вЗахватить ресурсы процессора, право выполнения ЦП. Несколько процессов захватывают этот ресурс,И если у одного из процессов больше путей выполнения, там будетболее высокий шансЗахватите право выполнения процессора

1.4 Параллелизм и параллелизм

параллельно:

  • Параллелизм означаетв то же времяПроисходят два или более события.
  • в параллелиразныеНесколько событий на объекте

Параллелизм:

  • Параллелизм означаетв тот же промежуток времениПроисходят два или более события.
  • Параллелизм находится втот же объектнесколько событий на

Видно, что параллелизм для процессов,Параллелизм для потоков.

1.5 Java реализует многопоточность

Выше сказано много основ, понять слова. Вернемся к Java и посмотрим, как Java реализует многопоточность~

Java реализует многопоточность с помощью класса Thread, давайте посмотримЛучший комментарий для класса Thread:

Из верхнего комментария выше мы можем обнаружить, что создание многопоточностидваметод:

  • Наследовать Thread и переопределить метод запуска
  • Реализуйте интерфейс Runnable и переопределите метод запуска.

1.5.1 Наследовать поток и переопределить метод запуска

Создайте класс, наследуйте Thread и переопределите метод запуска.


public class MyThread extends Thread {

	@Override
	public void run() {
		for (int x = 0; x < 200; x++) {
			System.out.println(x);
		}
	}

}

Давайте вызовем тест, чтобы увидеть:


public class MyThreadDemo {
	public static void main(String[] args) {
		// 创建两个线程对象
		MyThread my1 = new MyThread();
		MyThread my2 = new MyThread();

		my1.start();
		my2.start();
	}
}

1.5.2 Реализовать интерфейс Runnable и переписать метод запуска

Реализуйте интерфейс Runnable и переопределите метод запуска.


public class MyRunnable implements Runnable {

	@Override
	public void run() {
		for (int x = 0; x < 100; x++) {
			System.out.println(x);
		}
	}

}

Давайте вызовем тест, чтобы увидеть:


public class MyRunnableDemo {
	public static void main(String[] args) {
		// 创建MyRunnable类的对象
		MyRunnable my = new MyRunnable();

		Thread t1 = new Thread(my);
		Thread t2 = new Thread(my);

		t1.start();
		t2.start();
	}
}

Результат все тот же, что и вышеТакой жеДа, я не буду размещать здесь фотографии~~~

1.6 Детали, на которые необходимо обратить внимание при реализации многопоточности в Java

Не надоrun()иstart()запутался~

Разница между методами run() и start():

  • run():ПростоПоток выполнения пакетов кода, прямой вызов — это обычный метод
  • start():Во-первыхпоток запущен,после этогоМетод run() потока вызывается jvm.

Является ли запуск виртуальной машины JVM однопоточным или многопоточным?

  • является многопоточным. Запустится не только основной поток, но и хотя бы поток сборки мусора, иначе кто поможет вам вернуть неиспользуемую память~

Итак, поскольку существует два способа реализации многопоточности, мыкакой использовать? ? ?

Обычно мы используем для реализации интерфейса Runnable

  • Ограничения одиночного наследования в java можно избежать
  • должно быть одновременноРазделение запущенных задач и запущенных механизмов, поэтому мы решили реализовать интерфейс Runnable таким образом!

2. Резюме

В этой статье в основном объясняется, что такое потоки, и понимание основ потоков полезно для нашего будущего обучения. В основном здесьлегкий вход

Читая комментарии вверху, мы обнаружили, что есть такие слова, как "приоритет" и "фоновый поток". Эта статья не объясняет, что они собой представляют~ Итак, следующая статьяОсновное объяснение - API Thread~Пожалуйста, ждите этого~

Использование потоков на самом деле сделает наши данные небезопасными, и даже программа не сможет работать. Эти проблемы будут объяснены позже~

Когда я раньше изучал операционную систему, я также сделал небольшую заметку на основе книги «Компьютерная операционная система — Тан Сяодань», все из которых относительнопростое знание. Может быть, это поможет тебе~

Использованная литература:

  • "Основная технология Java, том 1"
  • «Практика параллельного программирования на Java»
  • «Компьютерная операционная система — Тан Сяодань»

Если в статье есть какие-либо ошибки, пожалуйста, поправьте меня, и мы сможем общаться друг с другом. Учащиеся, привыкшие читать технические статьи в WeChat и желающие получить больше ресурсов по Java, могутОбратите внимание на публичный аккаунт WeChat: Java3y.

img

Проект с открытым исходным кодом, охватывающий все точки знаний о бэкэнде Java (уже 6 тысяч звезд):GitHub.com/Zhongf UC очень…

если ты хочешьв реальном времениЕсли вы обратите внимание на мои обновленные статьи и галантерейные товары, которыми я делюсь, поищите в WeChat.Java3y.

Содержимое PDF-документоввсе вручную, если вы ничего не понимаете, вы можете напрямуюспросите меня(В официальном аккаунте есть мои контактные данные).