知足常乐 俭以养德
Java多线程是一个复杂的话题,里面涉及到多种术语,编程模型以及一些操作系统层面的细节。要学好多线程除了数量掌握好这些理论知识,更重要的在于练习,编程世界唯一的捷径就是不断练习。
结合自己多年的编程经验,以及参考国内外一些著名的文章和书籍,我想试着带大家进入多线程那有趣而又富有挑战性的世界。其实写这些文章需要勇气,因为稍微不注意,或者由于自己的水平有限,就会误导读者,反而带来不好的影响,所以我想先以翻译国外一些高质量的文章开始,保证理论知识的准确性,让大家正确入门,然后再添加各种实战。千里之行始于足下,只要我们都能坚持下去,相信每个人都会有收获。好了,让我们开始吧。
简单来说,并发是一种能能并行运行多个程序,或同一程序不同部分的能力。利用底层操作系统和硬件锁蕴含的能力,并发可以使程序获得更高的性能和吞吐量。例如,现在的计算机拥有多个CPU以及一个CPU包含多核,程序可以利用多核来服务某一处理的特定部分。在java程序里,结合多线程来达到并行处理及并发。
首当其中的就是java.lang.Thread
类,它是java中所有并发概念的基础,其次就是用java.lang.Runnable
来抽象了线程类的行为。还有其他的一些用于构建高级应用类,这些类在java1.5时被引入,存在于java.util.concurrent
中。
更多:java并发的演变
上述描述让我们觉得并发确实不错,而且容易实现。然而并不是,它需要你很好的理解各种基本概念以及清楚的了解你应用程序的目标。
相比于单线程,并发线程拥有更复杂的设计。那些访问共享资源的代码在被多线程执行时需要格外注意,不正确的线程同步所引发的问题极难检测,重现以及修复。这些错误往往发生在更高的环境,例如生产环境,有时根本无法在较低环境中复现。
除此之外,运行这些程序需要更多的资源,所以请确保你拥有充足的资源。
在一篇博文中覆盖所有的并发主题是不太可能的,所以在以下文章中将分开讨论不同的概念。你可以浏览这些主题,如果有什么问题和建议可以留言。
Java并发基础
对比
Runnable
与继承Thread
Executro框架
ScheduledThreadPoolExecutor
示例FixedSizeThreadPoolExecutor
示例ThreadPoolExecutor
示例ThreadPoolExecutor
+ Callable
+ Future
示例ThreadPoolExecutor
和信号量限制任务提交率示例BlockingQueue
示例UnCatchExceptionHandler
示例高级注意
ForkJoinPool
示例CountdownLatch
示例BinarySemaphore
java.util.concurrent.locks.Lock
java.util.concurrent.ThreadFactory
ThreadLocal
变量并发集合
ConcurrentHashMap
示例ConcurrentLinkedDeque
示例其他
期待你的后续文章
谢谢