Введение
Всем привет, меня зовут Brother Tong. Сегодня я хочу задать вам несколько вопросов об исходном коде JDK:
- Зачем смотреть исходный код JDK
- Порядок чтения исходного кода JDK
- Как читать исходный код JDK
Зачем смотреть исходный код JDK
Во-первых, исходный код JDK — это весь остальной исходный код.База, После понимания исходного кода JDK, а затем просмотра другого исходного кода будет достигнут эффект множителя.
Во-вторых, исходный код JDK содержит большое количествоструктура данныхЗнания — хороший материал для изучения структур данных, таких как связанные списки, очереди, хеш-таблицы, красно-черные деревья, таблицы переходов, ведра, кучи, двусторонние очереди и т. д.
3. Исходный код JDK содержит большое количествоШаблоны проектирования, является хорошим материалом для изучения шаблонов проектирования, таких как шаблон адаптера, шаблон метода шаблона, шаблон декоратора, шаблон итератора, шаблон прокси, шаблон фабрики, шаблон команды, шаблон состояния и т. д.
В-третьих, исходный код JDK содержит большое количествопродвинутые знания, такие как слабые ссылки, небезопасность, CAS, принципы блокировки, ложное совместное использование и т. д. Эти знания сложно изучить, не читая исходный код.
В-четвертых, лучше взять интервьюпредложение урожая, это может быть первоначальной мыслью многих студентов.На самом деле, если вы действительно читаете слишком много исходного кода, это может быть не слишком важно, потому что вы откроете для себя более широкий мир.
В-пятых, брат Тонг считает, что наиболее важным является то, что чтение исходного кода является своего рода упражнением для размышлений и обучения превосходному дизайну.лучший способ, Эта статья взята из исходного кода Gongsonghao Tongge.
Порядок чтения исходного кода JDK
Во-первых, я разделил исходный код JDK на следующие части:
базовый класс
базовый класс, который относится к классам, которые составляют часть базы исходного кода JDK.
Например, классы упаковки, классы отражения, классы инструментов и т.д., у этих классов есть одна общая черта, то есть логика кода относительно проста, и нет таких проблем, как структура данных и сложные операции.
для базового класса, брат Тонг предлагает просмотреть его от начала до конца.Если вы что-то не понимаете, вы можете написать контрольные примеры или проверить информацию в Интернете. Например, в Integer есть внутренний класс IntegerCache, вы можете не знать, что он делает, в это время бесполезно просто смотреть код, вы можете только проверить информацию в Интернете, и вы не можете слепо умереть.
простая коллекция
простая коллекция, относится к коллекции, которая не имеет проблем с безопасностью многопоточности.
Эта часть коллекции обычно используется в одном потоке или теле метода, но они используют много структур данных, поэтому им нужны определенные знания о структурах данных.
для простых коллекций, брат Тонг предлагает сначала понять базовые знания структуры данных, а затем просмотреть исходный код, что может быть проще. Конечно, позже Brother Tong также опубликует ряд структур данных.
Атомный класс
Атомный класс, относится к классу, который может гарантировать атомарность в многопоточной среде.
В эту категорию в основном входят классы, начинающиеся с Atomic* и заканчивающиеся на *Adder, расположенные в пакете atomic под juc.
для атомарных классов, Тонг Гэ предлагает сначала понять основные концепции Unsafe, CAS, псевдосовместного использования и т. д., затем рассмотреть простейший AtomicInteger и, наконец, рассмотреть сложный класс LongAdder. Среди них незаменимым средством является отладка точек останова.
Честно говоря, класс LongAdder может почерпнуть много высокоуровневых знаний, настоятельно рекомендуется изучить этот класс досконально, а потом посмотреть исходный код Disruptor, Netty и т. д. будет эффективнее с меньшими усилиями.
Синхронизатор
Синхронизатор, относится к классам или ключевым словам, которые существуют для управления конкурентными отношениями между несколькими потоками. Эта статья взята из исходного кода Gong Tong Tong. Можно сказать, что они являются самым важным содержанием в Java. Без них мульти- потоки не могут контролироваться нормальная работа.
Эта часть в основном включает в себя синхронизированное ключевое слово, ключевое слово volatile, повторную блокировку, блокировку чтения-записи, таймер обратного отсчета, семафор, петлевой барьер, стадировщик, реализацию распределенной блокировки и т. д.
для синхронизатора, Тонг Гэ предлагает сначала понять основные понятия модели памяти, видимости, атомарности, упорядочения, «происходит до» и т. д., затем попытаться прочитать исходный код этой части и, наконец, обобщить принцип «синхронизатора», который вы понять.».
параллельный сбор
параллельный сборЭто относится к многопоточной среде для обеспечения согласованности сбора данных.
Эта часть коллекции в основном используется в многопоточной среде, только несколько классов используют расширенные структуры данных, а другие — использование передовых методов, таких как блокировки, CAS, volatile и spin.
Для параллельных коллекций, у брата Тонга есть три предложения:
- Обязательно прочитайте после синхронизатора
- Сначала структура данных, такая как ConcurrentSkipList
- Используйте точки останова IDEA на уровне потока для непрерывной отладки, отладки, отладки.
Класс потока (пула)
Класс потока (пула), относится к классам, связанным с потоками и пулами потоков.
В эту категорию в основном входят Thread, ThreadLocal и три пула потоков.
Для классов потоков (пулов), предложение брата Тонга состоит в том, чтобы сначала понять целое, а затем разделить его на несколько частей, чтобы увидеть, смотреть только на части куска, не заботясь о других кодах, то есть выяснить, где находится ваш фокус, такой как , не заботьтесь о состоянии, когда вы видите запущенный процесс потока, пропускайте весь код, который включает в себя состояние, и наоборот, читайте все это, а затем смотрите вместе.
класс IO/NIO
IO класс, относится к классам, связанным с входными и выходными потоками. В эту категорию в основном входят классы, связанные с файловыми операциями, и классы, связанные с сетевым вводом-выводом.
Для категории IO брат Тонг предлагает просто просматривать и знать, что вы имеете в виду, и вы можете проверить это, когда вам это нужно.
А вот для классов, связанных с nio, все же необходимо внимательно изучить эту категорию мы будем изучать в соответствующих главах чтения исходного кода Netty.
другие
другие,Если вы столкнулись с ним на работе, то можете нажать на него, чтобы увидеть, но не рекомендуется тратить время на его изучение в одиночку.Например, категория времени и категория awt не очень нужны.
Как читать исходный код JDK
один,поставить цель, чем яснее цель, тем лучше, и не ставьте ее слишком иллюзорной. Например, ознакомиться со структурой данных HashMap — это очень ясная цель; с другой стороны, понять исходный код HashMap — это очень расплывчато.
два,попробуй задать вопрос сам, сначала задайте вопросы, основанные на определенном расхождении в очках знаний. Например, какие точки знаний вы можете придумать о HashMap?Эту часть можно представить бесконечно с помощью карты разума.Позже у меня есть возможность поделиться с вами идеей подключения карты разума.
три,попробуйте проблему с сетевым запросом, откройте Du Niang, введите баллы знаний, которые вы хотите изучить, и нажмите на предыдущие страницы, чтобы увидеть, с какими проблемами столкнулись другие.Конечно, учащиеся с сильными способностями также могут использовать Google, и вопросы в этой части запроса могут также дополняться Перейти к вашей карте ума.
Четыре,попробуйте прочитать исходный код, На приведенные выше вопросы попытайтесь найти ответ в исходном коде один за другим, от пункта к пункту, и, наконец, обобщите всю большую точку знаний.
пять,продолжай находить проблемы, в процессе чтения исходного кода вы можете обнаружить новые проблемы, сначала пропустите их, но добавьте в интеллект-карту, и дождитесь решения текущей проблемы, прежде чем решать ее.
шесть,сосредоточиться на своей проблеме, При чтении исходного кода вы должны сосредоточиться на своей текущей проблеме и не отвлекаться на другие проблемы. Например, когда вы смотрите на процесс выполнения задачи пула потоков, вас не волнует состояние пула потоков. .
Семь,Делайте больше сравнений, Горизонтальное сравнение и вертикальное сравнение, из многомерного сравнения, эта статья исходит из исходного кода Gongsonghao Tongge.
8,Делайте больше экспериментов, используйте режим отладки IDE, постоянно изменяйте точки останова и постоянно отлаживайте.
Девять,общаться с людьми, Если позволяют условия, больше общайтесь с окружающими вас людьми, конечно, вы также можете прийти и побеспокоить брата Тонга.
десять,Делайте больше резюме, Для задач, которые вы решаете самостоятельно, вы должны научиться обобщать и делать больше учебных заметок.Конечно, вы также можете внести свой вклад в брата Тонга.
11,Терпение и настойчивость, читать исходники очень нудное и нудное дело, надо упорствовать.
Суммировать
Сегодня мы говорили о нескольких проблемах в изучении исходного кода JDK.Мы случайно так много написали, что все от всего сердца. Надеюсь, вы сможете взять меня на колени.
пасхальные яйца
Наконец, отправьте карту памяти исходного кода JDK. Звездочка является обязательной частью, предложенной братом Тонгом. Студентам, у которых достаточно времени, конечно, лучше смотреть на нее без звездочки.
Части исходного кода JDK полностью проанализированы, щелкнитеПубличная учетная запись Tongge читает «Исходный код JDK» в левом нижнем углу исходного кода.Вы можете просмотреть весь анализ исходного кода.