[超级链接:Java并发学习系列-绪论]
本章主要对Java并发(Concurrent)在不同jdk版本中的发展简史进行学习。
Java语言从第一版本至今,内置了对并发(Concurrent)的各种支持技术。
为了能够让我们在学习Java并发(Concurrent)时,不被各种各样的并发技术弄得晕头转向,本章先对Java个版本中的主要并发技术进行简述。
注:由于时间有限,如果哪里有误,请指出,谢谢!
在JDK1.4及之前的版本,主要提供的并发技术有:
引用百度百科的解释:
volatile是一个类型修饰符(type specifier),就像大家更熟悉的const一样,它是被设计用来修饰被不同线程访问和修改的变量。volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
注:百度百科的解释并不是专门针对java语音中的volatile,而是C语音,不过其设计思想类型,可以拿来借鉴。
更通俗易懂的说法,在Java语音中,使用volatile关键字的目的:
volatile关键字还涉及到JMM(Java内存模型,Java Memory Model)以及并发的三个特性(原子性、有序性和可见性),关于volatile关键字的更多内容,计划在后续章节中进行更加详细的学习。
引用百度百科的一段解释:
synchronized 关键字,代表这个方法(或代码块)加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。它包括两种用法:synchronized 方法 和 synchronized 代码块 。
简单来说,synchronized关键字以同步方法和同步代码块的方式,为方法和代码块上的对象加锁。使得同一时刻,在这个对象上的多个线程,只能由持有这个对象锁的单个线程进行代码的调用执行。
synchronized 关键字能够保证代码的原子性、可见性和有序性。
关于synchronized关键字的更多内容,计划在后续章节中进行更加详细的学习。
所谓不变模式,就是指:在并发编程中,为确保数据的一致性和正确性,使用一种不可改变的对象。依靠其不可变的性质,来确保在没有同步的情况下依旧保持一致性和正确性。
Java中不变模式相关技术有:
关于不变模式,就简单进行这些介绍。如果感兴趣,可以自行学习。
众所周知,JDK5是Java发展的一个重要版本,提供了很多技术,如泛型 Generic、枚举类型 Enumeration、可变参数varargs、注解 Annotations等等。
在JDK1.5版本中,也提供了对并发编程极为重要的一个包:java.util.concurrent(并发包)
java.util.concurrent(并发包)提供了一些列较为给力的并发技术,主要有:
关于原子(Atomic)类型、显式锁(Lock)接口、并发集合、Callable和Future接口、执行器(Executor接口)的更多内容,计划在后续章节中进行更加详细的学习。
在JDK1.7版本中,主要提供的并发编程技术有:
关于分支合并(Fork/Join)框架的更多内容,计划在后续章节中进行更加详细的学习。
在JDK.18版本中,主要提供的并发编程技术有:
[1] 关于Java并发编程的总结和思考
[2] Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore
[3] Callable接口、Runable接口、Future接口
[4] Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore
[5] 高并发Java(10):JDK8对并发的新支持