Java并发编程与技术内幕
文章平均质量分 88
Evankaka
一步一个脚印,认真做好每一件事
展开
-
Java并发编程与技术内幕:Callable、Future、FutureTask、CompletionService
在上一文章中,笔者介绍了线程池及其内部的原理。今天主要讲的也是和线程相关的内容。一般情况下,使用Runnable接口、Thread实现的线程我们都是无法返回结果的。但是如果对一些场合需要线程返回的结果。就要使用用Callable、Future、FutureTask、CompletionService这几个类。Callable只能在ExecutorService的线程池中跑,但有返回结果,也可以通过原创 2016-06-12 08:53:38 · 27389 阅读 · 15 评论 -
Java并发编程与技术内幕:volatile的那些事
一、volatile变量 Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的...原创 2018-07-25 15:17:30 · 2225 阅读 · 1 评论 -
常见限流算法研究与实现
一、限流场景 很多做服务接口的人或多或少的遇到这样的场景,由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统。也就是面对大流量时,如何进行流量控制?服务接口的流量控制策略:分流、降级、限流等。本文讨论下限流策略,虽然降低了服务接口的访问频率和并发量,却换取服务接口和业务应用系统的高可用。1、实际场景中常用的限流策略: Nginx前端限流...原创 2018-07-24 15:42:06 · 3100 阅读 · 1 评论 -
Java 8编程进阶-Stream之函数式编程
1、什么是Stream Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并...原创 2018-07-12 10:31:38 · 2754 阅读 · 1 评论 -
如何确保三个线程顺序执行?
场景:有三个线程t1、t2、t3。确保三个线程t1执行完后t2执行,t2执行完成后t3执行。1.使用join1.使用join thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。t.join(); //调用join方法,等待线程t执行完毕t.join...原创 2018-07-03 09:42:00 · 16453 阅读 · 7 评论 -
延迟队列DelayQueue研究
1.什么是DelayQueue DelayQueue 是 Delayed 元素的一个无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部 是延迟期满后保存时间最长的 Delayed 元素。如果延迟都还没有期满,则队列没有头部,并且 poll 将返回 null。当一个元素的 getDelay(TimeUnit.NANOSECONDS) 方法返回一个小于等于 0 的值时,将发生到期。即...原创 2018-07-03 09:42:17 · 3356 阅读 · 1 评论 -
Java多线程学习(吐血超详细总结)
本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。原创 2015-03-14 13:13:17 · 420935 阅读 · 168 评论 -
Java并发编程与技术内幕:消费者-生产者模式研究
本文主要实现了生产者和消费者的java代码实现原创 2017-02-27 20:31:22 · 3278 阅读 · 0 评论 -
Java并发编程与技术内幕:线程池深入理解
林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka 摘要: 本文主要讲了Java当中的线程池的使用方法、注意事项及其实现源码实现原理,并辅以实例加以说明,对加深Java线程池的理解有很大的帮助。 首先,讲讲什么是线程池?照笔者的简单理解,其实就是一组线程实时处理休眠状态,等待唤醒执行。...原创 2016-06-08 08:38:57 · 50390 阅读 · 13 评论 -
Java并发编程与技术内幕:聊聊锁的技术内幕(中)
摘要:本文主要讲了读写锁。一、读写锁ReadWriteLock 在上文中回顾了并发包中的可重入锁ReentrantLock,并且也分析了它的源码。从中我们知道它是一个单一锁(笔者自创概念),意思是在多人读、多人写、或同时有人读和写时。只能有一个人能拿到锁,执行代码。但是在很多场景。我们想控制它能多人同时读,但是又不让它多人写或同时读和写时。(想想这是不是和数据库的可重复读有点类型?),原创 2016-07-18 08:46:24 · 4618 阅读 · 5 评论 -
Java并发编程与技术内幕:ArrayBlockingQueue、LinkedBlockingQueue及SynchronousQueue源码解析
本文主要讲了Java中BlockingQueue的源码一、BlockingQueue介绍与常用方法BlockingQueue是一个阻塞队列。在高并发场景是用得非常多的,在线程池中。如果运行线程数目大于核心线程数目时,也会尝试把新加入的线程放到一个BlockingQueue中去原创 2016-06-21 09:18:29 · 8919 阅读 · 3 评论 -
Java并发编程与技术内幕:ThreadFactory、ThreadLocal
ThreadFactory这个故名思义,就是一个线程工厂。用来创建线程。这里为什么要使用线程工厂呢?其实就是为了统一在创建线程时设置一些参数,如是否守护线程。线程一些特性等,如优先级。通过这个TreadFactory创建出来的线程能保证有相同的特性。原创 2016-06-20 11:15:14 · 8010 阅读 · 4 评论 -
Java并发编程与技术内幕:ConcurrentHashMap源码解析
本文主要讲了Java中ConcurrentHashMap 的源码原创 2016-06-27 08:54:30 · 5614 阅读 · 2 评论 -
Java并发编程与技术内幕:ThreadGroup线程组应用
线程组ThreadGroup表示一组线程的集合,一旦一个线程归属到一个线程组之中后,就不能再更换其所在的线程组。那么为什么要使用线程组呢?个人认为有以下的好处:方便统一管理,线程组可以进行复制,快速定位到一个线程,统一进行异常设置等。ThreadGroup它其实并不属于Java并发包中的内容,它是java.lang中的内容。但是掌握对其的于理解,在实际应用中有很大的帮助。原创 2016-06-13 09:09:54 · 20901 阅读 · 5 评论 -
Java并发编程与技术内幕:聊聊锁的技术内幕(上)
在Java并发编程里头,锁是一个非常重要的概念。就如同现实生活一样,如果房子上了锁。别人就进不去。Java里头如果一段代码取得了一个锁,其它地方再想去这个锁(或者再执行这个相同的代码)就都得等待锁释放。锁其实分成非常多。比如有互斥锁、读写锁、乐观锁、悲观锁、自旋锁、公平锁、非公平锁等。包括信号量其实都可以认为是一个锁。原创 2016-07-11 07:41:55 · 20499 阅读 · 1 评论 -
Java并发编程与技术内幕:CopyOnWriteArrayList、CopyOnWriteArraySet源码解析
本文主要讲了Java中CopyOnWriteArrayList 、CopyOnWriteArraySet的源码分析原创 2016-07-11 07:40:42 · 6395 阅读 · 0 评论 -
Java并发编程与技术内幕:ForkJoin 框架初探
一、ForkJoin介绍 ForkJoin是Java7提供的原生多线程并行处理框架,其基本思想是将大人物分割成小任务,最后将小任务聚合起来得到结果。它非常类似于HADOOP提供的MapReduce框架,只是MapReduce的任务可以针对集群内的所有计算节点,可以充分利用集群的能力完成计算任务。ForkJoin更加类似于单机版的MapReduce。 二、...原创 2018-07-27 15:01:42 · 2439 阅读 · 2 评论