前言

JUC是Java5.0开始提供的一组专门实现多线程并发处理的开发框架,利用JUC开发架构可以有效的解决实际线程项目开发之中出现的死锁、阻塞、资源访问与公平机制。

此笔记主要记录java.util.concurrent开发包之中的各个核心组成类的使用、操作原理分析,并且通过具体的实际代码对多线程的开发实际环境进行原理分析,同时方便自己随时复习掌握。

此系列学习笔记来源于课程MLDN《JUC线程框架深度讲解》,有兴趣的小伙伴们可以购买学习!

JUC开发包简介

多线程是Java开发的主要特色,也是所有的编程开发之中最为麻烦的部分,对于多线程不妨做出如下几个简单思考:

  • 多线程开发在实际的工作之中一定会存在,并且会使用,简单一点理解(只是简单理解),每一个用户就表示一个线程;
  • 如果现在没有所谓的多线程访问同一资源,例如:数据库连接,一些公共的数据操作类,那么可能永远不会感受到所谓的同步与异步的区别,就好比如果是正常的开发过程之中使用ArrayList,Vector对于单线程没有任何影响;
  • 多线程之中会提供同步的处理操作:synchronized,wait(),notify(),notifyAll(),但是难度太大了;
  • 多线程访问的时候一定要进行各种数据类型的操作,那么为了保证数据操作的完成性需要大量使用volatile关键字。

在正常情况下所使用的多线程模型实际上经历了如下几个步骤:

  • 传统开发形式Thread,Runnable为主,但是这个模型有缺陷(无法返回数据、同步处理复杂);
  • 在JDK1.5之后提供有一个新的多线程实现方式就使用Future和Callable的模型,可以实现数据的异步返回处理;
  • 在JDK1.5之后的众多版本里面为了不断地解决开发多线程的困难,又提供了java.util.concurrent开发包。

java.util.concurrent开发包

  • 传统线程编程模式之中为了防止死锁等现象的出现,往往会考虑性能、公平性、资源管理等问题,这样就加重了开发的负担;
  • 利用Java5.0添加的java.util.concurrent开发包JUC进行多线程编程将会有效的减少竞争条件(race conditions)和死锁线程。

java.util.concurrent核心类

(1)Executor

public interface Exector
//具体Runnable任务的执行者

(2)ExecutorService

public interface ExecutorService extends Executor
//一个线程池管理者,能把Runnable,Callable提交到池中进行调度

(3)Semaphore

public class Semaphore implements java.io.Serializable
//一个计数信号量

(4)ReentrantLock

public class ReentrantLock implements Lock, java.io.Serializable
//一个可重入的互斥锁定Lock,功能类似synchronized,但要强大很多

(5)Future

public interface Future<V>
//是与Runnable,Callable进行交互的接口,比如一个线程执行结束取返回的结果等等,还提供了cancel终止线程

(6)BlockingQueue

public interface BlockingQueue<E> extends Queue<E>
//阻塞队列

(7)CompletionService

public interface CompletionService<V>
//ExecutorService的扩展,可以获得线程执行结果

(8)CountDownLatch

public class CountDownLatch
//一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等

(9)Callable

public interface Callable<V>
//A task that returns a result and may throw an exception.

(10)CyclicBarrier

public class CyclicBarrier
//一个同步辅助类,它允许一组线程互相等待,直到达到某个公共屏障点

(11)ScheduledExecutorService

public interface ScheduledExecutorService extends ExecutorService
//一个ExecutorService,可安排在给定的延迟后运行或定期执行的命令

JUC——JUC开发简介(一)的更多相关文章

  1. Scrum敏捷开发简介

    Agile 敏捷开发实践中,强调团队的自我管理.在 Scrum 中,自我团队管理体现在每天的 Scrum 会议中和日常的协同工作,在每天的 Scrum 例会中,团队成员一般回答一下几个问题 : 昨天完 ...

  2. Kendo UI 移动应用开发简介

    Kendo UI 移动应用开发简介 Kendo UI 支持开发 Web 应用,前面介绍的 SPA,也支持开发移动应用,至于使用 HTML5 + JavaScript + CSS 开发移动是不是一个好的 ...

  3. Webservice WCF WebApi 前端数据可视化 前端数据可视化 C# asp.net PhoneGap html5 C# Where 网站分布式开发简介 EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下? SQL Server之深入理解STUFF 你必须知道的EntityFramework 6.x和EntityFramework Cor

    Webservice WCF WebApi   注明:改编加组合 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下, ...

  4. JUC中AQS简介

    AQS,在java.util.concurrent.locks包中,AbstractQueuedSynchronizer这个类是并发包中的核心,了解其他类之前,需要先弄清楚AQS.在JUC的很多类中都 ...

  5. Linux C++ 开发简介

    主要介绍将Windows程序迁移到Linux系统相关知识 简介 Windows程序迁移到Linux系统可能需要修改很多代码, 既需要了解Linux平台的开发知识, 也需要了解Windows平台代码如何 ...

  6. Linux C++ 开发简介(包括Linux守护线程)

    阅读目录 简介 操作系统 编辑器 编译器 构建系统 调试 IDE 可执行程序.动态库.静态库 服务 Windows服务简介 创建Windows服务 注册Windows服务 管理Windows服务 Li ...

  7. 机器学习的Spark与Scala开发简介

     一.机器学习常用开发软件:Spark.Scala 1. Spark简介: MLlib包含的库文件有: 分类 降维 回归 聚类 推荐系统 自然语言处理 在线学习 统计学习方法:偏向理论性,数理统计的方 ...

  8. Python自动化开发-简介

    1.Python简介 Python创始人  Guido Van Rossum,人称"龟叔",1989年圣诞节期间,为了在阿姆斯特丹打发时间,开发的一个新的脚本解释程序 作为ABC语 ...

  9. 微信小程序原生开发简介

    简介: 总结: 1. 逻辑层使用js引擎,视图层使用webview渲染 2. 微信小程序已经支持了绝大部分的 ES6 API 3. 可以自动补全css的兼容语法 文档:https://develope ...

随机推荐

  1. 聚类之高斯混合模型(Gaussian Mixture Model)【转】

    k-means应该是原来级别的聚类方法了,这整理下一个使用后验概率准确评测其精度的方法—高斯混合模型. 我们谈到了用 k-means 进行聚类的方法,这次我们来说一下另一个很流行的算法:Gaussia ...

  2. SpringBoot 默认日志

    默认使用的这个类 org.apache.commons.logging.Log import org.apache.commons.logging.Log; import org.apache.com ...

  3. HDU 1358 Period 求前缀长度和出现次数(KMP的next数组的使用)

    Period Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  4. 如何在localStorage中存取数组

    默认localStorage只能存取字符串 那么如何存取数组呢 let newlist = [] localStorage.setItem('recent', JSON.stringify(newli ...

  5. 获取url中?后面传递的参数

    function getUrlArgs(){ var url=location.href; var i=url.indexOf('?'); if(i==-1)return; var querystr= ...

  6. 【星云测试】开发者测试(3)-采用精准测试工具对springcloud微服务应用进行穿透测试

    1.微服务简介 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以独立地编译及部署,并通过各自暴露的API接 ...

  7. Linux-- su和sudo 切换用户

    su 切换用户 用法:su [选项] [-] [用户 [参数]... ] - :以 login-shell 方式进行登录 不加 - :以 no-login-shell 方式进行登录 -c:只进行一次在 ...

  8. 个人对js闭包的心得见解

    谈起闭包很多人都会挠头.我以前也是,因此我查阅了很多资料,综合分析和理解,自认现在已经识得了闭包的真面目.下面我就从闭包的产生条件,闭包的作用,闭包的实质,闭包的本质,闭包产生的时机,闭包的应用 等几 ...

  9. Spring MVC中如何解决POST请求中文乱码问题,GET的又如何处理呢

    在web.xml中配置过滤器 GET请求乱码解决: 在Tomcat中service.xml中

  10. js 实现内容的展开和收缩

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...