文章分类 -  java

上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 62 下一页
摘要:Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁、偏向锁) Java 并发编程:线程间的协作(wait/notify/sleep/yield/join) Java 并发编程:vo 阅读全文
posted @ 2017-05-28 15:48 天涯海角路 阅读(145) 评论(0) 推荐(0)
摘要:一、互斥锁 互斥锁虽然能够保障内存可见性和原子性,保障共享数据的安全访问,但是作为一种较为粗暴的同步机制,有很多缺点: 1. 悲观锁:每次拿数据都会先加锁,降低代码并发度。 2. 上下文切换开销大:线程的挂起和恢复需要很大的开销,并且存在较长时间的中断 3. 优先级反转:当一个线程在等待一个锁时不能 阅读全文
posted @ 2017-05-28 15:45 天涯海角路 阅读(124) 评论(0) 推荐(0)
摘要:一、概述: BlockingQueue作为线程容器,可以为线程同步提供有力的保障。 二、BlockingQueue定义的常用方法 1.BlockingQueue定义的常用方法如下: 抛出异常 特殊值 阻塞 超时 插入 add(e) offer(e) put(e) offer(e, time, uni 阅读全文
posted @ 2017-05-28 15:44 天涯海角路 阅读(173) 评论(0) 推荐(0)
摘要:一、什么是同步器 多线程并发的执行,之间通过某种 共享 状态来同步,只有当状态满足 xxxx 条件,才能触发线程执行 xxxx 。 这个共同的语义可以称之为同步器。可以认为以上所有的锁机制都可以基于同步器定制来实现的。 而juc(java.util.concurrent)里的思想是 将这些场景抽象出 阅读全文
posted @ 2017-05-28 15:43 天涯海角路 阅读(116) 评论(0) 推荐(0)
摘要:Java AQS是Java并发框架的一个底层实现。AQS的全称为(AbstractQueuedSynchronizer)。 ReentrantLock,ReentrantReadWriteLock,Semaphore,CountDownLatch等java并发工具都是基于AQS实现的。 一.为什么需 阅读全文
posted @ 2017-05-28 15:39 天涯海角路 阅读(489) 评论(0) 推荐(1)
摘要:JAVA AQS的全称为(AbstractQueuedSynchronizer),用于JAVA多线程的开发,从名称我们也可以看出,它实现了同步的队列,而这个队列是指线程队列。AQS类在java.util.concurrent.locks下面。 AQS和CAS作为JAVA5之后非常重要的特性,能在并发 阅读全文
posted @ 2017-05-28 15:37 天涯海角路 阅读(209) 评论(0) 推荐(0)
摘要:此小节介绍几个与锁有关的有用工具。 闭锁(Latch) 闭锁(Latch):一种同步方法,可以延迟线程的进度直到线程到达某个终点状态。通俗的讲就是,一个闭锁相当于一扇大门,在大门打开之前所有线程都被阻断,一旦大门打开所有线程都将通过,但是一旦大门打开,所有线程都通过了,那么这个闭锁的状态就失效了,门 阅读全文
posted @ 2017-05-28 15:35 天涯海角路 阅读(172) 评论(0) 推荐(0)
摘要:volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于v 阅读全文
posted @ 2017-05-28 15:21 天涯海角路 阅读(150) 评论(0) 推荐(0)
摘要:一、概述 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronized(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLo 阅读全文
posted @ 2017-05-28 15:20 天涯海角路 阅读(93) 评论(0) 推荐(0)
摘要:锁(lock)的代价 锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,加锁、释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。操作系统对多线程的锁进行 阅读全文
posted @ 2017-05-28 15:13 天涯海角路 阅读(165) 评论(0) 推荐(0)
摘要:看了一堆文章,终于把Java CAS的原理深入分析清楚了。 感谢GOOGLE强大的搜索,借此挖苦下百度,依靠百度什么都学习不到! 参考文档: http://www.blogjava.NET/xylz/archive/2010/07/04/325206.html http://blog.hesey.N 阅读全文
posted @ 2017-05-28 15:09 天涯海角路 阅读(160) 评论(0) 推荐(0)
摘要:在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 (2)一个线程持有锁会导致其它所有需要此锁的线程挂起。 (3)如果一个优先级高的线程等待一个优先级低的线 阅读全文
posted @ 2017-05-28 15:07 天涯海角路 阅读(173) 评论(0) 推荐(0)
摘要:四个开发模式意思: TDD:测试驱动开发(Test-Driven Development) BDD:行为驱动开发(Behavior Driven Development) ATDD:验收测试驱动开发(Acceptance Test Driven Development) DDD:领域驱动开发(Dom 阅读全文
posted @ 2017-05-28 15:04 天涯海角路 阅读(748) 评论(0) 推荐(0)
摘要:1.数据流图(Data Flow Diagram) 坚持更DFD,它从数据的传递和加工角度,以图形方式来表达系统的逻辑功能,数据在系统内部的逻辑流向和逻辑交换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示放大。它是描绘信息流和数据从输入移动到输出的过程中所经受的变换 数据流图的 阅读全文
posted @ 2017-05-28 14:59 天涯海角路 阅读(911) 评论(0) 推荐(0)
摘要:1. TDD TDD指的是Test Drive Development,很明显的意思是测试驱动开发,也就是说我们可以从测试的角度来检验整个项目。大概的流程是先针对每个功能点抽象出接口代码,然后编写单元测试代码,接下来实现接口,运行单元测试代码,循环此过程,直到整个单元测试都通过。这一点和敏捷开发有类 阅读全文
posted @ 2017-05-28 14:57 天涯海角路 阅读(814) 评论(0) 推荐(0)
摘要:在程序设计中,我们有时会遇到这样的情况,一个线程将数据写到一个buffer中,另外一个线程从中读数据。所以这里就有多线程竞争的问题。通常的解决办法是对竞争资源加锁。但是,一般加锁的损耗较高。其实,对于这样的一个线程写,一个线程读的特殊情况,可以以一种简单的无锁RingBuffer来实现。这样代码的运 阅读全文
posted @ 2017-05-28 14:56 天涯海角路 阅读(464) 评论(0) 推荐(0)
摘要:上一篇讲述了并发包下的Lock,Lock可以更好的解决线程同步问题,使之更面向对象,并且ReadWriteLock在处理同步时更强大,那么同样,线程间仅仅互斥是不够的,还需要通信,本篇的内容是基于上篇之上,使用Lock如何处理线程通信。 那么引入本篇的主角,Condition,Condition 将 阅读全文
posted @ 2017-05-28 12:51 天涯海角路 阅读(1004) 评论(0) 推荐(0)
摘要:已经不记得最早接触到 Disruptor 是什么时候了,只记得发现它的时候它是以具有闪电般的速度被介绍的。于是在脑子里, Disruptor 和“闪电”一词关联了起来,然而却一直没有时间去探究一下。 最近正在进行一项对性能有很高要求的产品项目的研究,自然想起了闪电般的 Disruptor ,这必有它 阅读全文
posted @ 2017-05-28 12:50 天涯海角路 阅读(117) 评论(0) 推荐(0)
摘要:一.并行和并发区别: 并行:是指两者同时执行一件事。比如赛跑,两个人都在不停的往前跑; 并发:是指资源有限的情况下,两者交替轮流使用资源。比如一段路(单核CPU资源)同时只能过一个人,A走一段后,让给B,B用完继续给A ,交替使用,目的是提高效率。 并行:是指两者同时执行一件事。比如赛跑,两个人都在 阅读全文
posted @ 2017-05-28 12:24 天涯海角路 阅读(188) 评论(0) 推荐(0)
摘要:阻塞队列:线程安全 按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列检索操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。 注意: 1、 阅读全文
posted @ 2017-05-28 12:22 天涯海角路 阅读(159) 评论(0) 推荐(0)

上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 62 下一页