Java线程知识积累
涉及Java线程相关内容,都是干货。
南北雪树
有一种中午叫 16:00,我在等待着......
展开
-
Java多线程之—Synchronized方式和CAS方式实现线程安全性能对比
性能比较猜想1.大胆假设在设计试验方法之前,针对Synchronized和CAS两种方式的特点,我们先来思考一下两种方式效率如何?首先,我们在回顾一下两种方式是如何保证线程安全的。Synchronized方式通过大家应该很熟悉,他的行为非常悲观,只要有一个线程进入Synchronized临界区域(确保不被多线程并发访问的区域),其他线程均不能进入,直到早先进入的线程退出临界区域。和Syn...转载 2018-09-18 19:40:21 · 907 阅读 · 0 评论 -
深入理解Java线程池原理分析与使用(尤其当线程队列满了之后事项)
在这里借花献佛了,那别人的东西学一学了。在我们的开发中“池”的概念并不罕见,有数据库连接池、线程池、对象池、常量池等等。下面我们主要针对线程池来一步一步揭开线程池的面纱。使用线程池的好处1、降低资源消耗可以重复利用已创建的线程降低线程创建和销毁造成的消耗。2、提高响应速度当任务到达时,任务可以不需要等到线程创建就能立即执行。3、提高线程的可管理性线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源...转载 2018-06-04 22:06:45 · 27106 阅读 · 2 评论 -
Java多线程之Fork/Join框架基本使用(八)
1. 概述java.util.concurrent.ForkJoinPool由Java大师Doug Lea主持编写,它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。本文中对Fork/Join框架的讲解,基于JDK1.8+中的Fork/Join框架实现,参考的Fork/Join框架主要源代码也基于JDK1.8+。这几篇文章将试图解释转载 2018-01-16 20:58:39 · 1976 阅读 · 0 评论 -
Java多线程之原子操作atomic的使用CAS(七)
3-5、java.util.concurrent.atomic:线程安全的原子操作包在JDK1.5+的版本中,Doug Lea和他的团队还为我们提供了一套用于保证线程安全的原子操作。我们都知道在多线程环境下,对于更新对象中的某个属性、更新基本类型数据、更新数组(集合)都可能产生脏数据问题(如果您不清楚这个问题,请Google或者Baidu。这边文章本身不讨论脏数据产生的具体原因)。为了避免...转载 2018-01-13 16:37:15 · 5285 阅读 · 0 评论 -
Java多线程之CountDownLatch同步器的使用(六)
3-4、CountDownLatch:同步器在JKD1.5+环境中,Doug Lea和他的团队为我们提供了可以很好实现这个要求的工具类:CountDownLatch和CyclicBarrier。我们首先介绍CountDownLatch的基本使用方式:3-4-1、CountDownLatch基本使用CountDownLatch是一个同步计数器,能够保证在其他线程完成某一个业务转载 2018-01-12 16:14:41 · 4117 阅读 · 0 评论 -
Java多线程之Semaphore的使用(五)
3、工作在多线程环境下的“计数器”:从这个小节开始,我们将以一个“赛跑”的例子,讲解JDK1.5环境下一些线程控制工具(包括Semaphore、CountDownLatch和java.util.concurrent.atomic子包),并且复习这个专题讲到的知识点:同步快、锁、线程池、BlockingQueue、Callable等。3-1、 赛跑比赛的需求现在您不仅可以通过转载 2018-01-12 15:04:37 · 1426 阅读 · 0 评论 -
Java多线程之Callable和其他Lock锁的使用(四)
1、概要如果您阅读JAVA的源代码,出现最多的代码作者包括:Doug Lea、Mark Reinhold、Josh Bloch、Arthur van Hoff、Neal Gafter、Pavani Diwanji等等。其中java.util.concurrent包中出现的基本都是Doug Lea的名字。Doug Lea,是对Java影响力最大的个人,直接贡献的设计包括java的Collec转载 2018-01-10 19:47:51 · 1170 阅读 · 0 评论 -
Java多线程之ThreadPoolExecutor关于参数队列详解(三)
5、扩展ThreadPoolExecutor线程池实际上JAVA中提供的ThreadPoolExecutor线程池是鼓励各位程序员进行扩展的(虽然大多数情况下您无需扩展),并且JBOSS(Netty)、Apache(Camel)也正是这样在做。下面我们看看一些由ThreadPoolExecutor提供的扩展方式。5-1、Hook methods在ThreadPoolExec转载 2018-01-08 20:48:34 · 1613 阅读 · 0 评论 -
Java多线程之ThreadPoolExecutor关于参数队列详解(二)
3-4、JAVA主要线程池的继承结构我们先来总结一下上文中讨论过的内容,首先就是JAVA中ThreadPoolExecutor类的继承结构。如下图所示:ThreadPoolExecutor:这个线程池就是我们这两篇文章中介绍的重点线程池实现。程序员可以通过这个线程池中的submit()方法或者execute()方法,执行所有实现了Runnable接口或者Callab转载 2018-01-08 15:38:18 · 2463 阅读 · 0 评论 -
Java多线程之ThreadPoolExecutor详解使用
1、概述我将讲解JAVA原生线程池的基本使用,并由此延伸出JAVA中和线程管理相关的类结构体系,然后我们详细描述JAVA原生线程池的结构和工作方式2、为什么要使用线程池前文我们已经讲到,线程是一个操作系统概念。操作系统负责这个线程的创建、挂起、运行、阻塞和终结操作。而操作系统创建线程、切换线程状态、终结线程都要进行CPU调度。另一方面,目前大多数生产环境我们所面临问题的技术背景...转载 2018-01-08 14:49:23 · 970 阅读 · 0 评论 -
Java多线程之ThreadPoolExecutor和Future结合使用
List> returnFuture = new ArrayList<>(); ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("openAccount-pool-%d").build(); ExecutorService pool = new ThreadPoolExecutor(2,原创 2017-12-19 17:07:25 · 2523 阅读 · 0 评论 -
JAVA多线程之Future的实际使用
话不都说,这里直接贴出代码:package com.whb.test;import java.util.ArrayList;import java.util.List;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurr原创 2017-10-12 19:40:09 · 631 阅读 · 0 评论 -
Java并发编程之为计算结果建立高效、可伸缩的高速缓存
5.6 为计算结果建立高效、可伸缩的高速缓存这个是Java并发编程实战pdf的第五章5.6节的内容。连接http://blog.youkuaiyun.com/ly908979139/article/details/69938866#comments算是原话了,转载 2017-09-05 10:34:32 · 335 阅读 · 0 评论 -
Java多线程安全之对象的发布和溢出、线程封闭详解
对象的发布与逸出“发布(Publish)“一个对象是指使对象能够在当前作用域之外的代码中使用。可以通过 公有静态变量,非私有方法,构造方法内隐含引用 三种方式。如果对象构造完成之前就发布该对象,就会破坏线程安全性。当某个不应该发布的对象被发布时,这种情况就被称为逸出(Escape)。下面我们首先来看看一个对象是如何逸出的。发布对象最简单的方法便是将对象的引用保存到一个共有的静态变量中,以便任...转载 2017-08-29 10:42:08 · 2209 阅读 · 2 评论 -
JAVA多线程安全之构造函数
在一般情况下,Java的构造函数总结如下:在构造函数一开始,this就是可用的了。 构造函数和普通函数一样,并不是默认被synchronized 的,有可能出现同步问题。 如果构造函数中访问静态变量的话,必须同步这个静态变量,否则一定会出问题。 如果只访问成员变量的话,无论在任何线程中,每一次构造函数被调用,其中的成员变量都是新建造出来的,因此不可能出现说在这个线程中运行的构造函数 会原创 2017-08-28 18:00:21 · 7419 阅读 · 2 评论 -
JAVA线程之Volatile与锁机制详解
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的synchronized”;与synchronized块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是synchronized的一部分。本文介绍了几种有效使用 volatile 变量的模式,并强调了几种不适合使用 volatile 变量的情形。锁提供了两种主要特性:互...转载 2017-08-27 23:17:23 · 7025 阅读 · 2 评论 -
java多线程之CAS详解
前言在Java并发包中有这样一个包,java.util.concurrent.atomic,该包是对Java部分数据类型的原子封装,在原有数据类型的基础上,提供了原子性的操作方法,保证了线程安全。下面以AtomicInteger为例,来看一下是如何实现的。[java] view plain copy print?public final转载 2017-07-18 23:32:04 · 1444 阅读 · 0 评论 -
Java I/O模型从BIO到NIO和Reactor模式
本文介绍了Java中的四种I/O模型,同步阻塞,同步非阻塞,多路复用,异步阻塞。同时将NIO和BIO进行了对比,并详细分析了基于NIO的Reactor模式,包括经典单线程模型以及多线程模式和多Reactor模式。原创文章,转载请务必将下面这段话置于文章开头处(保留超链接)。本文转发自技术世界,原文链接 http://www.jasongj.com/java/nio_reacto转载 2017-07-12 23:44:48 · 592 阅读 · 0 评论 -
线程间通信剖析使用详解
本文将介绍常用的线程间通信工具CountDownLatch、CyclicBarrier和Phaser的用法,并结合实例介绍它们各自的适用场景及相同点和不同点。原创文章,转载请务必将下面这段话置于文章开头处(保留超链接)。本文转发自技术世界,原文链接 http://www.jasongj.com/java/thread_communication/CountDownL转载 2017-07-12 23:28:49 · 342 阅读 · 0 评论 -
工作线程数究竟要设置为多少
一、需求缘起Web-Server通常有个配置,最大工作线程数,后端服务一般也有个配置,工作线程池的线程数量,这个线程数的配置不同的业务架构师有不同的经验值,有些业务设置为CPU核数的2倍,有些业务设置为CPU核数的8倍,有些业务设置为CPU核数的32倍。“工作线程数”的设置依据是什么,到底设置为多少能够最大化CPU性能,是本文要讨论的问题。 二、共性认知转载 2017-07-12 21:34:48 · 549 阅读 · 0 评论