![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java多线程知识集
LJHSkyWalker
热爱各种技术
星战迷!
展开
-
java多线程知识点 - Volatile 变量
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了几种有效使用 volatile 变量的模式,并强调了几种不适合使用 volatile 变量的情形。锁提供了两种...原创 2018-05-22 12:59:24 · 209 阅读 · 0 评论 -
CountDownLatch 和 CyclicBarrier的特点以及区别
几个月之前分别对这两个知识点源码做过一些总结,请参照如下地址java多线程知识点 - AQS - CountDownLatch: https://blog.csdn.net/qq_31615049/article/details/80427184 java多线程知识点 - AQS - CyclicBarrier: https://blog.csdn.net/qq_31615049/ar...原创 2018-10-21 21:37:38 · 188 阅读 · 0 评论 -
需要掌握的Java多线程基本技能
Thread实现线程的方式主要有两种,一种是继承Thread类,另一种是实现Runnable接口。Thread类本身也是实现了Runnable接口的。继承Thread,并且要重写run方法。public class MyThread extends Thread{ @Override public void run(){ super.run(); ...原创 2018-10-09 23:16:53 · 219 阅读 · 0 评论 -
java多线程知识点 - Semaphore的简介与使用
如果一个国家年接待游客数量是100w人,那么海关就应该加以限制,限制签证数量,不然城市会因为超负荷而陷入不同程度瘫痪。同样的CPU也面临如此问题,过多的并发数量会导致CPU的资源很快会消耗殆尽。于是引出了CPU信号限制Semaphore。Semaphore的中文含义是信号、信号系统。此类的主要作用是限制线程并发的数量。首先上代码看看最基本的用法:package com.umbrell...原创 2018-10-08 23:49:46 · 178 阅读 · 0 评论 -
并发包 源码分析 AtomicInteger
public class AtomicInteger extends Number implements java.io.Serializable {private static final Unsafe unsafe = Unsafe.getUnsafe(); unsafe类是涉及到底层的C语言编写的程序集 private static final long valueOffse...原创 2018-07-16 23:10:43 · 338 阅读 · 0 评论 -
atomic包中的类概述
Package java.util.concurrent.atomic这是一个小工具包,他的实际作用是提供了很多个无阻塞的线程安全的变量操作工具。无阻塞的线程安全:其含义就是不使用synchronize,而使用volatile+CAS的方式实现。该包下类摘要类描述AtomicBoolean针对一个 boolean 类型的变量做原子更新操作。AtomicInteger针对一个 int 类型的变量做原...原创 2018-07-16 13:10:35 · 546 阅读 · 1 评论 -
通过一次代码校验发现 线程池不建议使用Executors去创建,而是通过ThreadPoolExecutor方式的原因 顺便总结线程优缺点
【强制】线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。...原创 2018-06-26 20:12:54 · 22938 阅读 · 2 评论 -
线程间状态及通信方式
1、初始状态: 创建一个线程类,它实现Runnable或继承Thread。当这个类被new出来时(新实例简称newT),线程进入初始状态。2、可运行状态: newT执行start()方法,即可进入可运行状态。 当sleep睡醒时,或者被join插入的方法结束时,或者用户输入结束,可以进入可运行状态。 当cpu时间片用完,调用线程的yield方法,进入可运行状态。 锁池...原创 2018-06-07 23:33:15 · 300 阅读 · 0 评论 -
引用一些装逼理论解释悲观锁和乐观锁
悲观锁:理解悲观锁前首先要知道什么是悲观主义,悲观主义泛指对宇宙、社会、人生悲观失望的态度、观点和理论。作为一种世界观和人生观,认为世界变幻无常,人注定要遭受苦难,因而陷入悲观绝望,甚至认为生不如死,企图超越现实,以求解脱和获得拯救。同样的线程也会认为一个变量无时无刻处于被别人修改的状态,非常绝望,于是为了解脱,为了救赎,就把这个变量给锁了 - -!然后锁了之后,我就可以肆意的对对象胡作为非,然后...原创 2018-05-30 12:45:17 · 281 阅读 · 1 评论 -
java并发知识 - Synchronized
Synchronized如何使用:首先这是一个java的关键字,下面介绍如何使用它:不使用Synchronized:public class synchronizeddemo { public static int a = 0; public static void add(){ a++; } public static void main(Str...原创 2018-06-05 23:44:23 · 161 阅读 · 0 评论 -
java多线程知识点 - AQS - Semaphore(源码未完全读懂版 - -)仅仅是一个随笔
SemaphoreAQL里的同步组件,中文名:信号量他可以测试并发访问的线程个数,控制某个资源可被同时访问的个数,常用语只能提供有限资源的东西,比如数据库连接数!核心方法是 aquire 和 release废话不多说,直接看怎么用!一看就懂相当简单!demo1://定义线程并发个数private final static int threadCount = 20;public static ...原创 2018-05-24 23:23:31 · 159 阅读 · 0 评论 -
java多线程知识点 - AQS - CyclicBarrier,基于源码深度分析!详细!赞
CyclicBarrier原创 2018-05-24 21:13:09 · 175 阅读 · 0 评论 -
java多线程知识点 - AQS - CountDownLatch 基于源码剖析。
CountDownLatch他被用来同步一个或者多个任务,强制他们等待由其他任务执行的一组操作完成。我们可以想CountDownLatch插入一个初始计数值,任何对象调用这个wait()方法都将阻塞,直至这个计数器的值等于0。其他任务没有结束工作时,可以在该对象上调用countdown方法来减小这个计数值。原则:CountDownLatch只会被触发一次,并且在调用的时候计数器的值不能被重置。(可...原创 2018-05-23 23:28:45 · 177 阅读 · 0 评论 -
java多线程知识点 - AQS - 简介
AbstractQueuedSynchronizer--AQS--------J.U.C大大提高了java的并发性能,而AQS又是J.U.C的核心,堪称并发类的重中之重。AQS基于:使用Node实现FIFO -- first in first out的队列,可以用来构建锁和其他同步装置的基础框架。 利用int类型标识一个状态,reentrelock中有个status属...原创 2018-05-23 21:25:34 · 169 阅读 · 0 评论 -
java多线程知识点 - CAS原理解读
CAS是Compare And Swap的首字母,通过字面意思可以理解为,比较并交换。没有CAS之前:如果有两个线程同时执行hashmap的put操作,当经过哈希计算后这两个node都需要放在数组的同一个位置时,就会产生冲突,也就是哈希碰撞。有了CAS后:经过改良的ConcurrentHashMap可以在put操作时使用CAS方法,判断该内存区域有没有值,如果有则返回存在的对象,并决定是新增链表节...原创 2018-05-23 13:55:06 · 219 阅读 · 0 评论 -
深入理解ConcurrentHashMap jdk1.8版 未完待续
首先从命名来看,concurrentHashmap就是HashMap的并发版本,实现原理也基本和HashMap类似。但是Hashmap并不是安全的,而concurrentHashmap是线程安全的,因此并发编程中,ConcurrentHashMap是一个经常被使用的数据结构。之前对Hashmap的理解我是基于源码分析的,发现很多灵巧的写法,让我眼见大开。同样的ConcurrentHashMap的设...转载 2018-05-23 00:40:15 · 828 阅读 · 0 评论 -
java多线程知识点 - Callable,Runnable比较及用法
编写多线程程序一般有三种方法,Thread,Runnable,Callable.Runnable和Callable的区别是,(1)Callable规定的方法是call(),Runnable规定的方法是run().(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得(3)call方法可以抛出异常,run方法不可以(4)运行Callable任务可以拿到一个Future对象...转载 2018-05-27 10:08:50 · 151 阅读 · 0 评论 -
java多线程知识点 - ThreadLocal类详解与源码分析
转自 https://blog.csdn.net/shenlei19911210/article/details/50060223概述我们知道Spring通过各种DAO模板类降低了开发者使用各种数据持久技术的难度。这些模板类都是线程安全的,也就是说,多个DAO可以复用同一个模板实例而不会发生冲突。我们使用模板类访问底层数据,根据持久化技术的不同,模板类需要绑定数据连接或会话的资源。但这些资源本身是...转载 2018-05-27 09:52:12 · 146 阅读 · 0 评论 -
基于SXSSFWorkbook并发插入数据到Excel多个Sheet中,并且解决内存溢出
本文主旨:基于SXSSFWorkbook将百万数据插入Excel; 多个Sheet页采用线程池的方式并发插入数据; ThreadPoolExecutor线程池实现; 基于CountDownLatch实现线程多线程结束后进行下一步操作; 基于Java VisualVM排查内存溢出并且分析POI窗口参数; 重温GC过程;先介绍我们的Demo要实现的功能:【创建一个四线程的线程池,将...原创 2018-12-25 23:00:29 · 8247 阅读 · 4 评论