随着多核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 多线程相关知识 并附有相关练习题
java concurrent 多线程 PPT
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
Doug Lea Java Concurrent Programming
concurrent programming in java design principles and patterns .chm
Doug Lea, Concurrent Programming in Java Design Principles and Patterns
详细介绍java多线程编程的各个基础概念。JUC作者doug lea著
在并发或多线程应用程序中使用Java编程语言的简介。
word版本的资料,网上...Concurrent Programming in Java™: Design Principles and Patterns, Second Edition Doug Lea Publisher: Addison Wesley Second Edition October 01, 1999 ISBN: 0-201-31009-0, 432 pages
This book shows readers how to use the Java platform's threading model more precisely by helping them to understand the patterns and tradeoffs associated with concurrent programming
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 ...
Concurrent - Programming in Java.pdf,ppt,Doug Lea
Java并发编程-设计原则与模式(Concurrent.Programming.in.Java-Design.Principles.and.Patterns(Second.Edition))(中英版)
JAVAConcurrent Programming in Java 对于一些JAVA 理解
Concurrent Programming in Java Thread 看看吧