ConCurrent in Practice小记 (4)】的更多相关文章

ConCurrent in Practice小记 (3) 高级同步技巧 Semaphore Semaphore信号量,据说是Dijkstra大神发明的.内部维护一个许可集(Permits Set),用于发放许可和回收许可,存在内部计数器,主要用来计数能否得到资源(一般用来限制同时访问资源数).当一个线程拿到许可,计数器减一:当线程释放资源则计数器加一:当计数器为0则阻塞线程. 特别地: Semaphore的同步锁机制仅仅用于对访问许可的同步,对于需要访问对象的池等的同步锁并不保证.如一个线程池需…
Java-ConCurrent2.html :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0,.1);border-radius:3px}iframe{border:0}figure{-webkit-margin-before:0;-webkit-margin-after:0;-webkit-margin-start:0;-webkit-margin-end:0}kbd{border:1p…
ConCurrent in Practice小记 (1) 杂记,随书自己写的笔记: 综述问题 1.线程允许在同一个进程中的资源,包括共享内存,内存句柄,文件句柄.但是每个进程有自己的程序计数器,栈和局部变量. 2.安全问题:线程不安全本质上是由于单线程在在从共享内存或者文件中取得自己的资源后,在寄存器处理器缓存等地方对于线程外部是不可见的;因此当变量再次读取或写入到内存或者是文件中后就会产生冲突. 3.活跃性问题:即因为资源占用错误而是的程序无法得到正确的结果,典型如死锁.饥饿.活锁. 4.性能…
ConCurrent in Practice小记 (4) Executors Callable && Future <T> Callable:此接口有一个call()方法.在这个方法中,必须实现任务的(处理)逻辑.Callable接口是一个参数化的接口.意味着必须指明call()方法返回的数据类型. Future:也是一个接口,用来保证Callable对象结果的获取和管理. Executors一般接受一个Callable对象,返回一个Future对象.可以取消任务,也可以查看任…
Java concurrent in practice是一本好书,不过太繁冗.本文主要简述第一部分的内容. 多线程 优势 与单线程相比,可以利用多核的能力; 可以方便的建模成一个线程处理一种任务; 与异步模型相比,多线程同步模型更简单; 通过分离界面线程和工作线程, 可用于创建灵敏的用户界面. 劣势 多线程模型下,对象的状态不在受顺序执行的安全保护,而是需要同步. 同步下可能会出现不一致的问题,如死锁,饥饿. 多线程上下文切换开销可能会导致性能下降. 线程安全和同步 线程安全就是正确的同步状态,…
(function(){ if ( !this.Data || (typeof this.Data != 'object' && typeof this.Data != 'function') ) this.Data = new Object(); if ( this.Data.Stack === undefined ) this.Data.Stack = undefined; with ( function(){ with ( Data ) { return function () {…
编写Java多线程程序一直以来都是一件十分困难的事,多线程程序的bug很难测试,DCL(Double Check Lock)就是一个典型,因此对多线程安全的理论分析就显得十分重要,当然这决不是说对多线程程序的测试就是不必要的.传统上,对多线程程序的分析是通过分析操作之间可能的执行先后顺序,然而程序执行顺序十分复杂,它与硬件系统架构,编译器,缓存以及虚拟机的实现都有着很大的关系.仅仅为了分析多线程程序就需要了解这么多底层知识确实不值得,况且当年选择学Java就是因为不用理会烦人的硬件和操作系统,这…
编写Java多线程程序一直以来都是一件十分困难的事,多线程程序的bug很难测试,DCL(Double Check Lock)就是一个典型,因此对多线程安全的理论分析就显得十分重要,当然这决不是说对多线程程序的测试就是不必要的.传统上,对多线程程序的分析是通过分析操作之间可能的执行先后顺序,然而程序执行顺序十分复杂,它与硬件系统架构,编译器,缓存以及虚拟机的实现都有着很大的关系.仅仅为了分析多线程程序就需要了解这么多底层知识确实不值得,况且当年选择学Java就是因为不用理会烦人的硬件和操作系统,这…
去年看过一篇<ThreadPoolExecutor详解>大致讲了ThreadPoolExecutor内部的代码实现. 总结一下,主要有以下四点: 当有任务提交的时候,会创建核心线程去执行任务(即使有核心线程空闲仍会创建):当核心线程数达到corePoolSize时,后续提交的都会进BlockingQueue中排队:当BlockingQueue满了(offer失败),就会创建临时线程(临时线程空闲超过一定时间后,会被销毁):当线程总数达到maximumPoolSize时,后续提交的任务都会被Re…
近期公司在进行Java开发者的招聘活动,当中有一道面试题是这种:"请简单描写叙述一下ThreadLocal类的作用." 结果发现有非常多的面试者没有听说过ThreadLocal或者听说过却不知道这个类到底是用来做什么的. 因此这里写一篇博客来介绍一下ThreadLocal这个类. 在我们日常的项目开发中,ThreadLocal并非一个常常使用的类.它很多其它的是被用在诸如Spring,Tomcat或者是Hibernate这些封装了多线程并发的框架或是容器中. 而它的目的也正是为了解决多…