<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>并发编程 on 极客老墨</title>
    <link>https://blog.hankmo.com/categories/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/</link>
    <description>Recent content in 并发编程 on 极客老墨</description>
    <generator>Hugo -- 0.138.0</generator>
    <language>zh-cn</language>
    <lastBuildDate>Mon, 28 Mar 2022 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.hankmo.com/categories/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>读《Java并发》— Java内存模型</title>
      <link>https://blog.hankmo.com/posts/tech/jcip-jmm/</link>
      <pubDate>Mon, 28 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.hankmo.com/posts/tech/jcip-jmm/</guid>
      <description>这一章称为&amp;#34;对象的共享&amp;#34;，书中重点介绍了如何共享和发布对象，这两章是并发编程中非常基础却很重要的部分。在本章，首先介绍了什么是可见性问题，然后介绍了Java内存模型，讨论什么是内存可见性以及java保证内存可见性的方式，在此基础上介绍如何设计线程安全的对象，如何使用线程封闭技术和设计不可变对象来避免同步，最后再重点探讨如何安全地发布对象。由于内容较多，我将这一章分为两篇来阐述自己对本章的理解，这是上篇。Java的并发机制基于共享内存，要理解对象间的共享关系，则离不开对象间的内存关系，这涉及到本章要介绍的一个重要概念：Java内存模型，又称 JMM。</description>
    </item>
    <item>
      <title>读《Java并发》— 线程安全性</title>
      <link>https://blog.hankmo.com/posts/tech/jcip-concurrency-thread-safety/</link>
      <pubDate>Tue, 25 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.hankmo.com/posts/tech/jcip-concurrency-thread-safety/</guid>
      <description>并发编程会带来诸多挑战，最基本的就是 *线程安全性*，但这又是一个非常复杂的主题。这一章重点介绍了什么是线程安全性、原子性、竞态条件等概念，以及在Java中如果通过加锁来确保线程安全性。要理解什么是线程安全性，必须先明白什么是正确性，因为正确性是线程安全性的核心概念。正确性的含义是，某个类的行为与其规范完全一致。这个定义从静态视角出发强调了类的规范重要性。通常，我们不会定义类的详细规范，但是我们应该为类和方法提供文档注释，来说明类是否是线程安全的，以及对于线程安全性如何保证。尤其在方法上，应该明确规定该方法是否已经保证了线程安全，调用者是否应该在同步机制内调用该方法等等。</description>
    </item>
    <item>
      <title>读《Java并发》— 并发简史</title>
      <link>https://blog.hankmo.com/posts/tech/jcip-concurrency-intro/</link>
      <pubDate>Sat, 22 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.hankmo.com/posts/tech/jcip-concurrency-intro/</guid>
      <description>这一章主要讲述线程的发展历史，以及并发编程带来的优势和挑战。1946年第一台计算机诞生，一直到20世纪50年代中期，这时候的计算机没有操作系统的概念，采用手工操作的方式工作，每次只能有一个人使用计算机。此时的手工操作方式，用户独占全机，昂贵的计算机资源得不到充分利用。后来，随着计算机的发展，出现了批处理系统、多道程序系统，它们都提升了计算机的资源利用率。1961年，分时系统（Time Sharing System）出现，此时的一台计算机可以供多个用户终端同时连接并使用，就好像自己在独占计算机一样。分时系统将CPU的运行时间分成很短的时间片，按时间片分配给不同的连接终端使用，这充分利用了计算机资源，看起来就好像多个用户在同时使用计算机一样。</description>
    </item>
    <item>
      <title>多线程活跃性——哲学家就餐问题及死锁</title>
      <link>https://blog.hankmo.com/posts/tech/deadlock/</link>
      <pubDate>Thu, 20 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.hankmo.com/posts/tech/deadlock/</guid>
      <description>死锁是多线程编程中最常见的一种&amp;#34;活跃性问题&amp;#34;，除了死锁还包括&amp;#34;饥饿&amp;#34;和&amp;#34;活锁&amp;#34;，这些活跃性问题给并发编程带来极大的挑战。比如出现死锁时，定位和分析问题相对困难，一旦出现死锁，通常只能重启应用程序。本文通过死锁最经典的&amp;#34;哲学家就餐问题&amp;#34;来介绍死锁的产生原因和解决办法。死锁指的是多个线程相互等待彼此而进入永久暂停状态。比如，线程 T1 持有锁 L1 去申请锁 L2，但是线程 T2 持有锁 L2 申请锁 L1，此时它们都在等待对象释放锁，从而进入永久阻塞状态。这就好比两个小朋友，他们各有一个玩具，但都不愿意分享给对方，却希望获得对方的玩具，最终互不相让，只能彼此干瞪眼了。</description>
    </item>
    <item>
      <title>读《Java并发》— 简介</title>
      <link>https://blog.hankmo.com/posts/tech/jcip-book-intro/</link>
      <pubDate>Thu, 20 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://blog.hankmo.com/posts/tech/jcip-book-intro/</guid>
      <description>《Java并发编程实战》是 Brian Goetz 等 6 位 Java 大师合著的介绍 Java 并发编程的经典著作，这部名著由浅入深的介绍了 Java 并发编程的诸多知识，是一本完美的Java并发参考手册，豆瓣评分 9.0，可见其受欢迎程度。《Java并发编程实战》从并发性和线程安全性的基本概念出发，介绍了如何使用类库提供的基本并发构建块，用于避免并发危险、构造线程安全的类及验证线程安全的规则，如何将小的线程安全类组合成更大的线程安全类，如何利用线程来提高并发应用程序的吞吐量，如何识别可并行执行的任务，如何提高单线程子系统的响应性，如何确保并发程序执行预期任务，如何提高并发代码的性能和可伸缩性等内容，最后介绍了一些高级主题，如显式锁、原子变量、非阻塞算法以及如何开发自定义的同步工具类。</description>
    </item>
  </channel>
</rss>
