Java多线程

Java多线程是一个复杂的话题,里面涉及到多种术语,编程模型以及一些操作系统层面的细节。要学好多线程除了数量掌握好这些理论知识,更重要的在于练习,编程世界唯一的捷径就是不断练习。

结合自己多年的编程经验,以及参考国内外一些著名的文章和书籍,我想试着带大家进入多线程那有趣而又富有挑战性的世界。其实写这些文章需要勇气,因为稍微不注意,或者由于自己的水平有限,就会误导读者,反而带来不好的影响,所以我想先以翻译国外一些高质量的文章开始,保证理论知识的准确性,让大家正确入门,然后再添加各种实战。千里之行始于足下,只要我们都能坚持下去,相信每个人都会有收获。好了,让我们开始吧。

简单来说,并发是一种能能并行运行多个程序,或同一程序不同部分的能力。利用底层操作系统和硬件锁蕴含的能力,并发可以使程序获得更高的性能和吞吐量。例如,现在的计算机拥有多个CPU以及一个CPU包含多核,程序可以利用多核来服务某一处理的特定部分。在java程序里,结合多线程来达到并行处理及并发。

什么让java拥有并发能力

首当其中的就是java.lang.Thread类,它是java中所有并发概念的基础,其次就是用java.lang.Runnable来抽象了线程类的行为。还有其他的一些用于构建高级应用类,这些类在java1.5时被引入,存在于java.util.concurrent中。

更多:java并发的演变

Java并发真的如此简单吗

上述描述让我们觉得并发确实不错,而且容易实现。然而并不是,它需要你很好的理解各种基本概念以及清楚的了解你应用程序的目标。
相比于单线程,并发线程拥有更复杂的设计。那些访问共享资源的代码在被多线程执行时需要格外注意,不正确的线程同步所引发的问题极难检测,重现以及修复。这些错误往往发生在更高的环境,例如生产环境,有时根本无法在较低环境中复现。
除此之外,运行这些程序需要更多的资源,所以请确保你拥有充足的资源。

Java并发系列

在一篇博文中覆盖所有的并发主题是不太可能的,所以在以下文章中将分开讨论不同的概念。你可以浏览这些主题,如果有什么问题和建议可以留言。
Java并发基础

  • 什么是线程安全
  • 对象级别锁和类级别锁
  • 比较和交换算法(CAS)
  • wait(),notify()以及notifyAll()

对比

  • 实现Runnable与继承Thread
  • 锁与监视器
  • yield()与join()
  • sleep()与wait()

Executro框架

  • Executor框架系列
  • ScheduledThreadPoolExecutor示例
  • FixedSizeThreadPoolExecutor示例
  • ThreadPoolExecutor示例
  • ThreadPoolExecutor + Callable + Future示例
  • 使用ThreadPoolExecutor和信号量限制任务提交率示例
  • BlockingQueue示例
  • UnCatchExceptionHandler示例

高级注意

  • ForkJoinPool示例
  • CountdownLatch示例
  • 使用信号量控制并发访问
  • BinarySemaphore
  • java.util.concurrent.locks.Lock
  • java.util.concurrent.ThreadFactory
  • ThreadLocal变量
  • 线程间通讯

并发集合

  • ConcurrentHashMap示例
  • ConcurrentLinkedDeque示例

其他

  • 创建和解决死锁

2 thoughts on “Java多线程

发表评论

邮箱地址不会被公开。 必填项已用*标注