`
ztianlong
  • 浏览: 66662 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jdk 多线程框架

 
阅读更多

最常用的 ExecutorService 

Executors.newFixedThreadPool(n)

 

exec.execute(run);

线程池必须使用shutdown来显式关闭,否则主线程就无法退出。shutdown也不会阻塞主线程。

定时执行线程 ScheduledExecutorService

 ScheduledFuture beeperHandle = scheduler.scheduleAtFixedRate( beeper, 1, 2, SECONDS);

 

要多个线程同时工作以完成同一件事情,而且在完成过程中,往往会等待其他线程都完成某一阶段后再执行,等所有线程都到达某一个阶段后再统一执行。

这时候CyclicBarrier就可以派上用场。CyclicBarrier最重要的属性就是参与者个数,另外最要方法是await()。当所有线程都调用了await()后,就表示这些线程都可以继续执行,否则就会等待。

 

并发库中的BlockingQueue是一个比较好玩的类,顾名思义,就是阻塞队列。该类主要提供了两个方法put()和take(),前者将一个对象放到队列中,如果队列已经满了,就等待直到有空闲节点;后者从head取一个对象,如果没有对象,就等待直到有可取的对象。

 

CountDownLatch是一个倒数计数的锁,当倒数到0时触发事件,也就是开锁,其他人就可以进入了。在一些应用场合中,需要等待某个条件达到要求后才能做后面的事情;同时当线程都完成后也会触发事件,以便进行后面的操作。

CountDownLatch最重要的方法是countDown()和await(),前者主要是倒数一次,后者是等待倒数到0,如果没有到达0,就只有阻塞等待了。

一个CountDouwnLatch实例是不能重复使用的,也就是说它是一次性的,锁一经被打开就不能再关闭使用了,如果想重复使用,请考虑使用CyclicBarrier。

 

考虑以下场景:浏览网页时,浏览器了5个线程下载网页中的图片文件,由于图片大小、网站访问速度等诸多因素的影响,完成图片下载的时间就会有很大的不同。如果先下载完成的图片就会被先显示到界面上,反之,后下载的图片就后显示。


Java的并发库的CompletionService可以满足这种场景要求。该接口有两个重要方法:submit()和take()。submit用于提交一个runnable或者callable,一般会提交给一个线程池处理;而take就是取出已经执行完毕runnable或者callable实例的Future对象,如果没有满足要求的,就等待了。 CompletionService还有一个对应的方法poll,该方法与take类似,只是不会等待,如果没有满足要求,就返回null对象。

 

 

操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java并发库的Semaphore可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,acquire()获取一个许可,如果没有就等待,而release()释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。

Semaphore维护了当前访问的个数,提供同步机制,控制同时访问的个数。在数据结构中链表可以保存“无限”的节点,用Semaphore可以实现有限大小的链表。

分享到:
评论

相关推荐

    API包含JDK1.6和SSH框架的api

    这个版本的JDK包含了Java核心类库,如集合框架、I/O流、多线程、网络编程以及反射等重要功能。学习JDK1.6的API可以帮助开发者理解Java基础语法和类库的使用,例如`java.util`包下的ArrayList、HashMap,或者`java.io...

    JAVA多线程框架.pdf

    Java多线程框架是Java开发中的重要组成部分,特别是在并发处理和高性能应用中不可或缺。Java.util.concurrent包是JDK5引入的一个重要更新,它包含了Doug Lea设计的并发库,极大地提升了Java处理并发的能力。这个库...

    Java-jdk10-最新最全多线程编程实战指南-核心篇

    《Java-jdk10-最新最全多线程编程实战指南-核心篇》是一本深入探讨Java多线程编程的专著,针对Java 10版本进行了全面的更新和优化。这本书聚焦于Java多线程的核心概念和技术,旨在帮助开发者理解和掌握如何在并发...

    JAVA多线程框架[定义].pdf

    Java多线程框架是Java编程中处理并发问题的关键工具,主要集中在`java.util.concurrent`包中。这个包是在JDK 5版本中引入的,其中包含了许多由Doug Lea设计的高效并发工具类。Doug Lea是一位在并发编程领域有着深厚...

    JAVA多线程框架[归类].pdf

    Java多线程框架是Java开发中的重要组成部分,尤其是在软件开发领域。JDK 5引入了一个重要的更新,即java.util.concurrent包,它包含了Doug Lea设计的并发库,大大简化了多线程编程。这个框架提供了丰富的类和接口,...

    ruoyi框架 3.8.7 版本,升级到jdk21 springboot 3.2.5 初步测试可以运行通过

    升级到JDK 21可能会引入一些新的语言特性,比如更高效的内存管理和垃圾收集机制,以及可能的并发和多线程优化。这有助于提高程序的运行效率和稳定性,同时开发者也能利用新特性编写更简洁、高效的代码。 其次,...

    Java多线程-JDK5.0新增线程创建方式

    ### Java多线程-JDK5.0新增线程创建方式 #### 一、新增方式1:实现Callable接口 ##### (1)介绍 自Java 5.0起,为提高线程管理的灵活性与效率,引入了`Callable`接口,这是一种全新的创建线程的方式。与传统的`...

    旧版本JDK JDK1.4

    4. **集合框架增强**:包括`java.util.concurrent`包的引入,提供了线程安全的集合类,如`ConcurrentHashMap`,提升了多线程编程的效率和可靠性。 5. **枚举类型**:这是Java语言的一个重大改进,允许开发者定义...

    windows64位jdk6、jdk7、jdk8安装包

    此外,JDK7还引入了Fork/Join框架,用于并行执行任务,提高了多线程程序的性能。 JDK8是Java平台标准版的第八个主要版本,于2014年发布,是Java发展历程中的一个里程碑。这个版本引入了Lambda表达式,使得函数式...

    spring对应jdk1.8的jar包

    3. **并发和多线程**:JDK 1.8对`java.util.concurrent`包做了优化,例如`ForkJoinPool`和`Stream API`的引入。Spring 3.2.0可能未充分利用这些新特性,从而失去了一些性能提升的机会。 4. **日期和时间API**:JDK ...

    JDK7新特性(完整篇)

    Java Development Kit (JDK) 7 是 Java 编程语言的一个重大更新,包含了多项新特性,旨在提升开发者的效率、程序的性能以及对现代计算环境的支持。以下是对这些特性的详细解析: 1. **JDK7新特性<一>概述** JDK7的...

    jdk1.7免安装+jdk1.8安装版

    JDK1.7是在2012年发布的,引入了许多新特性,如动态类型语言支持(invokedynamic字节码指令),Project Coin的小型语言改进,Fork/Join框架以提升多线程性能,以及对NIO.2的增强,提供更好的文件系统访问能力。...

    JDK1.4老版本

    对集合框架进行了进一步的优化和扩展,包括`java.util.concurrent`包中的并发工具类,以及`Map`接口中`putIfAbsent()`等新方法,提升了多线程环境下的编程效率。 6. **JDBC 3.0** JDK 1.4支持JDBC 3.0,增加了...

    spring5.0和4.2.0 jdk8和jdk7 对应的版本

    此外,它还加强了对WebSocket和SPR-12319(一个关于处理多线程环境下AOP代理的bug)的支持。在4.2.0中,Spring Data项目也得到了更新,提供了对更多NoSQL数据库的支持。 然而,随着JDK 8的发布,Spring框架也进行了...

    jdk-8u181最新可商用jdk8 JAVA8 JDK1.8下载

    1. **Lambda表达式**:引入了函数式编程的概念,允许将代码块作为参数传递给方法,简化了多线程处理和集合操作。 2. **默认方法**:在接口中引入,默认方法允许为接口添加实现,使得向后兼容性得以保持。 3. **...

    多线程并发学习书籍

    在IT行业中,多线程并发编程是至关重要的一个领域,特别是在服务器端开发、大数据处理以及高性能计算中。这里提到的“多线程并发学习书籍”集合包含六本关于这一主题的专业书籍,覆盖了2012年至2018年的最新知识。...

    jdk_8中文文档

    这份"jdk api 1.8_google"文档很可能是JDK 8的API文档,详细列出了所有类、接口、方法和常量,涵盖了核心类库、集合框架、网络编程、I/O流、多线程、反射等多个方面。通过阅读这份文档,开发者可以: 1. 学习每个类...

    IBMJDK1.6linux.zip

    3. **Java类库**:包括各种API,如集合框架、网络编程、I/O流、多线程、数据库连接等,这些都封装在一系列的jar文件中,如rt.jar和charsets.jar。 4. **开发工具**:例如javadoc(生成API文档)、jdb(调试器)、...

Global site tag (gtag.js) - Google Analytics