深圳Java培训
达内深圳宝安中心

136-3244-2201

热门课程

【深圳Java培训】看下并发在Java上的发展史

  • 时间:2016-11-29
  • 发布:深圳Java培训
  • 来源:达内新闻

Java早在JDK1.0时代,就有了java.lang.Thread和java.lang.Runnable这两个东西。深圳java培训(sz.java.tedu.cn)专家也看到了很多国内讲Java的教材都会写到这个。

<a style='color:blue' href='http://sz.java.tedu.cn/'>深圳Java培训</a>机构

Runnable接口很简单,就一个void返回类型的run()方法。而Thread则是Runnable的一个具体实现。虽然Thread在实际的Java应用开发中,直接用到会比较少,但它是Java并发的一个基础。如果你打开Thread的源码,可以看到和java.lang.Object相似,Thread的实现中很多重要方法带有native关键字,这就是需要JVM和底层操作系统打交道的地方。通常,一个最简单的开启新线程的方法,就是继承Thread,然后实例化并调用start()方法。或者把任务用Runnable对象分离开,传参给Thread。此外,对于线程同步,synchronized这个大家都熟悉的关键字也早早地就存在在Java平台中。

随着多核概念的流行,Java也顺应时代的潮流,并发开发全面兴起了。在JavaSE5中,JUC(java.util.concurrent)包出现了,这无疑引领Java彻底进入并发时代。在java.util.concurrent包及其子包中,有了很多好玩的新东西:

执行器的概念和线程池的实现。从Executor接口开始,到ExecutorService,再到很多基于ThreadPoolExecutor实现的具体执行器。执行器实际上是采用了一种叫做命令模式的设计,将任务Runnable和具体执行线程相分离,并给出了生命周期等管理方法,一般只要execute一个Runnable任务即可。未能及时执行的任务放在一个队列中等待执行,这又是一种Producer & Customer模式。线程池的实现,则可以更方便地管理执行的线程,如重用线程,并限定线程所占资源上界,比起直接Thread的简陋用法更有实用更方便更有效率。

Callable、Future。前者使得提交线程有返回结果变成可能(Runnable的run()是void的),后者则对任务的生命周期控制更为直接。和CompletionService结合起来用更灵活。

原子类。原子类的很多操作能够保证原子性,不保留中间状态,可以高效解决很多线程安全问题。需要注意的是,虽然java.util.concurrent.atomic包中有AtomicInteger、AtomicLong和AtomicReference等,但却没有AtomicDouble和AtomicFloat,这个需要自己实现。Sun的JDK原子类的操作很多是基于sun.misc.Unsafe的(此类并未随Jdk源码一起开放)。

锁机制。java.util.concurrent除了atomic子包外,还有一个locks的子包。除了Java平台固有的synchronized对象锁机制,JavaSE5中的并发包用Java代码重新实现了一套锁机制,而这些很多都是基于前面提到的Unsafe类的原子操作。AbstractQueuedSynchronizer是这个体系中重要的抽象类。在JUC锁的实现体系中有和synchronized内在锁对应的Lock实现以及和监视器模型中wait()和notify()/notifyAll()对应的Condition类及其awati()和signal()/signalAll()。

并发容器类和其它工具类。在并发情况下,JUC给我们带来的好东西就是更加实用的CopyOnWriteArrayList、ConcurrentHashMap以及BlockingQueue的各类实现。除此之外,CountDownLatch、CyclicBarrier、Semaphore、Exchanger都是很实用的并发工具类。

JavaSE5的java.util.concurrent真得是给我们带来了很多并发的新工具,在并发相关的各个方面都给出了很好的实现,和Java体系自身的线程和锁机制相比可以说是用Java代码又建立了一套新的并发类体系。但并发这里和容器类体系不同的一点是,多线程并发离不开底层的支持,从上层的应用开发理念到底层的实现支持,Java并发框架的战线更长更复杂。不管怎样,JavaSE5给我们带来了并发时代的见面礼非常丰厚,而这些和一个牛人是分不开的,他就是Doug Lea,他参与了并发框架的大部分开发。

JavaSE5只是Java并发开发的一个开始,Java后续版本中也在不断探索更高效的并发模型和开发工具类实现。JavaSE6在锁机制实现上的改进,在Java7中ForkJoin的引入,都是Java并发的新发展。

如果想学习的同学可以参加深圳达内JAVA培训,免费试听,或周末免费参加深圳JAVA培训公 开课程试听,这里有强大的师资阵容,“师者,所以传道授业解惑也”,讲师,是教育的主体,是影响整体办学质量、学员学习质量的重要因素。所以深圳达内 JAVA培训竭尽全力为学员提供最强大的师资力量,让学员接受最好的教育,学习最前沿的技术。掌握一门牛逼闪闪技术,待遇自然不在话下。

友情提醒:想要了解更多关于深圳达内的最新资讯,也可以关注我们的微信公众号

深圳Java培训机构

上一篇:【深圳Java培训】简单认识一下什么是java的多线程并发
下一篇:【深圳Java培训】新浪专访,达内齐一楠解读2016达内耀升级

25岁的时候不要去规划30岁的事情

如何成为一名合格的Java程序员?

管理与技术未必不可兼得,一个20年IT老兵的码农生涯

面试官分享:3年以下经验程序员的面试方法论

选择城市和中心
贵州省

广西省

海南省