随着多核cpu的发展,以及线程技术的普及使用。并行编程成了必须掌握的技能。这里列出了java常用的一些并行编程API;
0. 起源
最早的计算机一个cpu,并且cpu单核。某个时间只有一个进程或线程在cpu上执行。不存在某一时间有多个线程访问同一个数据的问题,也就不存在并发编程了。随着cpu上多核以及cpu上L1/L2/L3 cache技术的发展,程序员编写出并行运行的多线程程序能更好的利用cpu资源;提高程序性能;
当今我们使用的多核CPU大多是基于SMP架构的。SMP架构简单说就是单个CPU上集成了多核,但是多核共享cpu上的高速缓存L1/L2/L3,但是多核是各自从L1/L2/L3上划分了自己的缓存区域,之间互不影响;
问题来了,既然CPU上的高速缓存对各个核之间都不可见,那么操作系统调度线程时一会儿将一个线程调度到核1上去执行,过几个时间片后又调度到核2上去执行,那么如果核1的L1/L2/L3cache没有fluch到主存,会造成核2运行此进程时,用的旧数据。这个问题,操作系统已将帮忙解决了,操作系统调度程序将进程调度到核2上去执行前已将将核1的L1/L2/L3flush到主存了,我们不必关系;而且操作系统利用亲和算法,将同一个进程尽量调度到同一个核上去,避免缓存失效导致的性能问题;
1. ThreadLocal
threadLocal这个类是java api提供的一个api; 其实就是每个thread都存各自的一份数据,也就不存在并发编程的问题了。其实并发编程就是为了保护数据,避免不同线程访问一个数据时出现交错,而互相覆盖,造成脏数据;
2. 互斥锁
所以为了保证数据的一直性,通过互斥锁来要求不同线程顺序访问数据,只有持有这个锁的线程才能访问被保护数据,其他线程等待锁;
对应与java里的notify,wait,notifyall等api; 以及synchronized关键字;
3. CAS(compareAndSwap)
是一个cpu提供的一个硬件级的命令,这个命令试图设置一个变量,如果设置成功,说明无线程在访问次变量。一般通过无限for循环调用。
4. 集合(concurrent 包)
concurrent包中实现各种高性能的集合类;concurrentHashMap,concurrentArrayList等等;里边多用轻量级的CAS操作,所以性能很好。
分享到:
相关推荐
为了简化多线程编程,Java提供了一系列工具和API,如`java.util.Timer`和`java.util.concurrent`包,这些工具可以帮助开发者更高效地管理线程间的同步问题。 ##### 1.2 synchronized关键字 `synchronized`关键字是...
Java 1.5引入了`java.util.concurrent`包,包含了一系列的并发工具类,如线程池、阻塞队列、并发集合等。这些工具旨在提高并发性能并简化编程模型。例如,`ExecutorService`和`ThreadPoolExecutor`提供了线程池管理...
Concurrent Programming in Java Design Principles and Pattern英文版 2.48M Java并发编程设计原则与模式_第二版(原书中文版) 19.4M Concurrent_Programming_in_Java_Design_Principles_Lecture DougLea
concurrent programming in java design principles and patterns .chm
《Doug Lea, Concurrent Programming in Java Design Principles and Patterns》是一本深入探讨Java并发编程的经典著作,由Doug Lea撰写。这本书对于理解Java平台上的多线程编程和并发设计模式至关重要,是许多Java...
Java的并发库提供了一系列工具和API,如`java.util.concurrent`包,帮助开发者有效地管理并发任务。本书主要涵盖以下几个方面: 1. **线程基础**:书中首先介绍了线程的基本概念,包括如何创建和管理线程,以及线程...
《Java并发编程》一书是由著名并发编程专家Doug Lea所著,他同时也是Java并发包(JUC)的作者,这本书详细介绍了Java多线程编程的基础概念和高级技术。 首先,书中提到了并发编程的基本概念,包括并发模型、设计力...
Java平台提供了丰富的API支持并发编程,如`java.util.concurrent`包下的各种类和接口,这些工具可以帮助开发者更高效地管理多线程环境下的任务调度和数据共享问题。 ### Java并发编程基础 #### 1. 多线程基础 - **...
本书《Concurrent Programming in Java™: Design Principles and Patterns 2nd》由Doug Lea编写,出版于1999年,是关于Java并发编程的一本权威指南。Java平台因其强大的线程支持能力而备受青睐,这使得Java程序员...
Concurrent Programming on Windows 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系...
Concurrent Programming in Java™: Design Principles and Patterns, Second Edition. 介绍并发编程的好的著作,著名的并发大师 Doug Lea的杰作。
Title: Learning Concurrent Programming in Scala, 2nd Edition Author: Aleksandar Prokopec Length: 382 pages Edition: 2nd Revised edition Language: English Publisher: Packt Publishing - ebooks Account ...
《Java并发编程实践》第二版是一本专注于Java编程语言中并发程序设计的著作,由Doug Lea撰写,Addison Wesley出版社于1999年10月出版。这本书旨在为那些熟悉面向对象编程但对并发编程了解不多的开发者提供指导,同时...
例如,使用无锁数据结构或原子操作(`java.util.concurrent.atomic`包)。 3. **避免死锁、活锁和饥饿**:理解并预防这些并发问题至关重要。死锁发生在两个或多个线程相互等待对方释放资源导致僵局;活锁是线程不断...
《Concepts and Notations for Concurrent Programming》这篇论文由Gregory R. Andrews和Fred B. Schneider撰写,深入探讨了并行编程的核心概念和技术。尽管这是一篇较为古老的文章,但其内容仍然具有很高的参考价值...
- **标准库**:Java并发工具包(java.util.concurrent)提供了丰富的并发工具类。 - **第三方库**:例如Apache Commons Concurrency等。 ##### 2. 构建库 - **自定义并发组件**:根据项目需求开发特定的并发工具。 ...
资深Java专家10年经验总结,全程案例式讲解,首本全面介绍Java多线程编程技术的专著 结合大量实例,全面讲解Java多线程编程中的并发访问、线程间通信、锁等最难突破的核心技术与应用实践 封底 Java多线程无处不在,...