E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
——【并发学习】
Java
并发学习
Concurrency
前言当我们设计微服务时,微服务的用户大多数情况下是同时发送很多请求给我们。那么就要求在我们微服务的内部需要能够有多个线程(Thread)来处理这些请求。(我们的微服务只是对外开放一个port但是为什么能同时接受很多request?这个问题我会单独写一篇.)简单来说,我们的server的主进程作为一个任务的发布者,使用线程来进行分发任务。多个任务同时进行那么就会用到Concurrency。正文一些概
殷老实
·
2019-05-27 08:28
Java
Java
并发学习
之ArrayBlockingQueue 源码分析
Java并发之ArrayBlockingQueue源码分析阻塞队列定义阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。支持阻塞的移除方法:意思是在队列为空时,获取元素的线程会等待队列变为非空。阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,
一只很菜的程序员
·
2019-05-26 18:14
并发学习
Java
并发学习
笔记(二)
请参看前一篇文章:Java
并发学习
笔记(一)——原子性、可见性、有序性问题六、等待—通知机制什么是等待通知—机制?
roseduan
·
2019-05-16 00:00
并发编程
java
Java
并发学习
笔记(一)——原子性、可见性、有序性问题
计算机的CPU、内存、I/O设备的速度一直存在较大的差异,依次是CPU>内存>I/O设备,为了权衡这三者的速度差异,主要提出了三种解决办法:CPU增加了缓存,均衡和内存的速度差异发明了进程、线程,分时复用CPU,提高CPU的使用效率编译指令优化,更好的利用缓存三种解决办法虽然有效,但是也带来了另外的三个问题,分别就是并发bug产生的源头。1.可见性问题如果是单核CPU,多个线程操作的都是同一个CP
roseduan
·
2019-05-10 00:00
并发编程
java
JAVA高
并发学习
(四)——显式锁
一、显式锁和内置锁JAVA中主要有两种锁,显式锁和内置锁。下面就是一点我个人的理解:内置锁:synchronized就是内置锁,它存在可选择性差、固话的锁。控制起来并不灵活。显示锁:指的就是可以显式声明的锁。和synchronized这种内置锁不同的是,显式锁可以手动的声明和释放,应用起来会更加灵活。提供了超时、中断等利于开发的功能。至于这两种锁应当如何选择的问题,首先JAVA对于内置锁的优化一直
_一个世纪
·
2019-04-27 15:20
JAVA
JAVA高
并发学习
(三)——JDK并发包
一、CountDownLatch:倒计时器(发令枪)CountDownLatch的主要功能是让所有线程都结束操作后,才继续执行后面的操作。在声明一个CountDownLatch的时候,需要给定一个count(int类型),我们可以通过CountDownLatch提供的countDown()方法,对这个值进行减1操作。当这个值为0的时候,执行后续操作。这个工具类有点类似于ES6中的Promise.a
_一个世纪
·
2019-04-27 14:51
Semaphore
CountDownLatch
并发
JAVA
Java
并发学习
笔记
基础Runnable它可以理解成一个任务。它的run()方法就是任务的逻辑,执行顺序。Thread它是一个任务的载体,虚拟机通过它来分配任务执行的时间片。Thread中的start方法可以作为一个并发任务的入口。不通过start方法来执行任务,那么run方法就只是一个普通的方法线程的状态有四种:1,NEW线程创建的时候短暂的处于这种状态。这种状态下已经可以获得CPU时间了,随后可能进入RUNNAB
java高并发
·
2019-04-22 15:25
JAVA高
并发学习
笔记(二)
线程的操作一、终止线程通常情况下,一个线程在工作完成后就会终止,不需要手工去关闭。但是也存在一些服务线程,它们往往都不是正常终结的(比如无穷循环)。而如果想要关闭这类进程,我们可以使用Thread类提供的stop方法。但是,这个方法已经被标记为废弃方法,不建议使用。为什么会被废弃?因为在强制终止一个线程的时候,可能会出现操作只进行了一半,而被强制完成的情况。这样往往会出现数据错误等问题,是必须要避
_一个世纪
·
2019-04-20 15:08
JAVA
JAVA高
并发学习
笔记(一)
一、并发和并行从字面上理解的话,并发就是同时发生,并行是指同时执行(这里的执行指的是执行过程)。而在CPU中的效果就是:并发:多个线程在同一个CPU中抢行(准确说是由CPU在指挥),每个线程之间交叉执行,同一时间只有一个线程在执行。反复切换,这个速度极快。并行:其实就是几个线程在多个CPU中同时执行,不存在互相切换的过程。通过交通来理解,就是有本来有三条车道:并发是突然变成了一条车道,然后三条车道
_一个世纪
·
2019-04-20 11:09
JAVA
Java
并发学习
总结
可见性线程之间的可见性,一个线程修改的状态对另外的线程可见,即A线程改变了某个状态,B也能马上看到。用volatile修饰的变量就是可见的,不允许线程内部缓存和重排序,即直接修改内存,如果不是用volatile的话,不同的线程会先从主存中copy一个对象,放在CPU缓存中,导致不同的线程修改变量,其他的线程看不到,不过volatile它不保证原子性,例如:volatileinta=0;a++;分为
Jake巨佬
·
2019-04-20 10:40
java
C++
并发学习
笔记
c++并发笔记并发的途径进程与线程线程管理线程安全的stack并发的途径一个经典的比喻:当两个程序员在两个独立的办公室一起做一个软件项目,他们可以安静地工作、不互相干扰,并且他们人手一套参考手册。但是,他们沟通起来就有些困难,比起可以直接互相交谈,他们必须使用电话、电子邮件或到对方的办公室进行直接交流。并且,管理两个办公室需要有一定的经费支出,还需要购买多份参考手册。假设,让开发人员同在一间办公室
DoYourThings
·
2019-04-07 23:20
学习笔记
Java
并发学习
记录之线程间通信
Java
并发学习
记录之线程间通信volatile和synchronized关键字Java
并发学习
记录之volatileJava
并发学习
记录之synchronized等待/通知机制Java
并发学习
记录之wait-notify
一年春又来
·
2019-02-26 17:02
Java多线程
Java
并发学习
(四)-J.U.C之工具类
1、总览CountDownLatch允许一个或多个线程等待某些操作完成SemaphoreJava版本的信号量实现CyclicBarrier一种辅助性的同步结构,允许多个线程等待到达某个屏障Exchanger在线程间交换数据的一种手段2、CountDownLatch当一个或多个线程需要等待其他线程完成操作时,就可以使用CountDownLatch了,当然,最简单的你也可以使用join方法2.1、jo
J_Howie
·
2019-01-31 14:45
Java并发编程和高并发
Java
并发学习
(四)-J.U.C之工具类
1、总览CountDownLatch允许一个或多个线程等待某些操作完成SemaphoreJava版本的信号量实现CyclicBarrier一种辅助性的同步结构,允许多个线程等待到达某个屏障Exchanger在线程间交换数据的一种手段2、CountDownLatch当一个或多个线程需要等待其他线程完成操作时,就可以使用CountDownLatch了,当然,最简单的你也可以使用join方法2.1、jo
J_Howie
·
2019-01-31 14:45
Java并发编程和高并发
Java
并发学习
(三)- J.U.C之Atomic包
线程安全性定义:当多个线程访问某个类时,不管运行时环境采用何种调度方式,或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的,线程安全类一般具有这几个特性:原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作可见性:一个线程对主内存的修改可以及时的被其他线程观察到有序性:一个线程观察其他线程中的指令执行顺序,由于指令
J_Howie
·
2019-01-23 14:33
Java并发编程和高并发
Java
并发学习
(三)- J.U.C之Atomic包
线程安全性定义:当多个线程访问某个类时,不管运行时环境采用何种调度方式,或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的,线程安全类一般具有这几个特性:原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作可见性:一个线程对主内存的修改可以及时的被其他线程观察到有序性:一个线程观察其他线程中的指令执行顺序,由于指令
J_Howie
·
2019-01-23 14:33
Java并发编程和高并发
【深入学习并发之二】volatile关键字详解
若阅读过程中出现疑问,可先阅读
并发学习
总览volatile关键字一、volatile满足了哪几种特性有什么局限性volatile满足了并发中的原子性、可见性和局部有序性,但是其中的原子性是存在局限性的。
AsceticW
·
2018-12-14 14:46
Java并发
C++11 线程
并发学习
(一)
本文关键词:C++11多线程多进程并发概述:C++11标准的发布使得C++变得更加强大,其中最重要的特性是支持了多线程。这也是C++标准第一次在语言上承认了多线程应用。C++标准包含了C++语言本身和官方C++库。并且,在C++11标准之前是没有进程和线程的,而C++11标准承认了线程,并在官方C++库中提供了编写多线程程序的相关组件。本文以线程并发作为学习方向,记录博主本人的学习过程。一、C++
青城山小和尚
·
2018-11-27 20:27
C++
Java高
并发学习
(四)
Java高
并发学习
(四)驻守后台:守护线程(Daemon)守护线程是一种特殊的线程,他是系统的守护者,在后台默默的完成一些系统性的服务。比如垃圾回收线程,JIT线程也可以理解为守护线程。
和尚不洗碗
·
2018-10-18 08:57
并发
Java高
并发学习
(三)
ava高
并发学习
(三)分门别类的管理:线程组在一个系统中,如果线程数量很多,而且功能分配比较明确,就可以将功能相同的线程放置在一个线程组里。
和尚不洗碗
·
2018-10-18 08:47
并发
Java高
并发学习
(二)
Java高
并发学习
(二)volatile与java内存模型(JMM)Java的内存模型都是围绕着原子性,有序性和可见性展开的。为了在适当的场合,确保线程间的原子性,有序性,可见性。
和尚不洗碗
·
2018-10-18 08:36
并发
并发
Java高
并发学习
(一)
Java高
并发学习
(一)初始线程:线程的基本操作进行java并发设计的第一步,就是必须了解Java虚拟机提供的线程操作的API。比如如何创建并启动线程,如何终止线程,中断线程等。
和尚不洗碗
·
2018-10-18 08:20
并发
Java并发编程和高
并发学习
总结(一)-大纲
系列Java并发编程和高
并发学习
总结(二)-Java内存模型开篇语想写这样一个东西很久了,在慕课网上学完某老师的课程(避免打广告的嫌疑就不贴出来了,感兴趣的同学可以去慕课网上去搜来看看,是个付费课程)之后就觉得应该有这样的一个学习总结的东西来
J_Howie
·
2018-09-24 10:06
Java并发编程和高并发
JAVA多线程与
并发学习
总结
1.计算机系统使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用到的数据复制到缓存中,让计算能快速进行;当运算结束后再从缓存同步回内存之中,这样处理器就无需等待缓慢的内存读写了。缓存一致性:多处理器系统中,因为共享同一主内存,当多个处理器的运算任务都设计到同一块内存区域时,将可能导致各自的缓存数据不一致的情况,则同步回主内存时需要遵循一些协议。乱序执行优化:为了使得处理器内部的运算单位能尽量被
AI乔治
·
2018-08-16 21:22
(六)Java
并发学习
笔记--并发容器(J.U.C)
JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能。因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了并发性,当多个线程竞争容器时,吞吐量严重降低。因此Java5.0开始针对多线程并发访问设计,提供了并发性能较好的并发容器,引入了java.util.concurrent包。与Vector和Hashta
匆匆岁月
·
2018-08-14 20:26
(一)Java
并发学习
笔记
一、课程导学二、基本概念并发:同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程将交替地换入或者换出内存,这些线程是同时“存在”的,每个线程都处于执行过程中的某个状态,高速切换感觉同时执行。如果运行多核处理器上,此时,程序中的每个线程将分配到一个处理器核上,因此可以真正的同时运行。高并发:高并发(HighCuncurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指
匆匆岁月
·
2018-08-14 14:59
【Java
并发学习
五】图解ThreadLocal
简单整理下ThreadLocal的原理,以及它需要注意的内存泄漏。ThreadLocal原理ThreadLocal不多介绍,可看作线程内的局部变量(这个比喻很贴切)。我们平时声明的局部变量的范围一般是方法内的,而ThreadLocal变量的范围是整个线程。我们先来看一段代码demo:publicclassTest{//可看作线程内声明的局部变量staticThreadLocalthreadLoca
MrDTree
·
2018-07-22 23:51
【Java
并发学习
五】图解ThreadLocal
简单整理下ThreadLocal的原理,以及它需要注意的内存泄漏。ThreadLocal原理ThreadLocal不多介绍,可看作线程内的局部变量(这个比喻很贴切)。我们平时声明的局部变量的范围一般是方法内的,而ThreadLocal变量的范围是整个线程。我们先来看一段代码demo:publicclassTest{//可看作线程内声明的局部变量staticThreadLocalthreadLoca
MrDTree
·
2018-07-22 23:51
【Java
并发学习
四】如何实现一个定时线程池
在【Java
并发学习
一】如何实现一个线程池上进行扩展,我们想一下如何实现一个定时任务线程池呢?所谓“定时任务线程池”就是指放入线程池的任务,可以按照指定的等待周期循环执行。
MrDTree
·
2018-07-18 07:46
【Java
并发学习
四】如何实现一个定时线程池
在【Java
并发学习
一】如何实现一个线程池上进行扩展,我们想一下如何实现一个定时任务线程池呢?所谓“定时任务线程池”就是指放入线程池的任务,可以按照指定的等待周期循环执行。
MrDTree
·
2018-07-18 07:46
Java
并发学习
总结笔记 侵立删
转自:https://www.jianshu.com/p/cb1a23bc82d0并发最近重新复习了一边并发的知识,发现自己之前对于并发的了解只是皮毛。这里总结以下Java并发需要掌握的点。使用并发的一个重要原因是提高执行效率。由于I/O等情况阻塞,单个任务并不能充分利用CPU时间。所以在单处理器的机器上也应该使用并发。为了实现并发,操作系统层面提供了多进程。但是进程的数量和开销都有限制,并且多个
心神沫沫
·
2018-06-26 23:49
Java
并发学习
(九)— 多线程死锁
前言:既然知道了多线程的同步怎么执行的,那么死锁通过synchronized怎么产生一个死锁呢~之前阿里面试的时候面试官直接让我在电脑上敲出来~~只可惜我敲不出来==!!直接在纸上写了个大概~,总之这个对于面试还是很重要的@Slf4jpublicclassDeadLock{privatestaticObjectobj1=newObject();privatestaticObjectobj2=new
Jae_Wang
·
2018-05-22 11:12
Java并发编程
并发学习
(四) — 多线程有序执行
前言:在看了这些多线程的知识之后,突发奇想到怎么让多线程有序执行呢?第一种:用Thread.join()方法来确定该线程执行完毕第二种:用线程池的队列来执行任务第三种:用公共锁Object,配合wait/notifyAll方法,睡眠自己,唤醒另一个线程~join方法:join方法是阻塞的,会一定等到取消或者超时为止,这样就可以按顺序来。@Slf4jpublicclassJoinExample{pu
Jae_Wang
·
2018-05-21 23:46
Java并发编程
并发学习
(二) — 多线程的几种实现方式
本章主要对Java多线程实现的三种方式进行学习。1.前言提供了三种多线程的实现方式(前两种都是实现Runnable接口):继承Thread类,重写run()方法实现Runnable接口,实现run()方法Future接口+Callable接口+Executor接口下面分别对这三种实现方式进行学习。2.实现Runnable接口2.1.Runnable接口定义我们先来看以下Runnable接口的定义:
Jae_Wang
·
2018-05-21 22:44
Java并发编程
C++11
并发学习
之六:线程池的实现
为什么要使用线程池?目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务器等都具有一个共同点,就是单位时间内必须处理数目巨大的连接请求,但处理时间却相对较短。传统多线程方案中我们采用的服务器模型则是一旦接受到请求之后,即创建一个新的线程,由该线程执行任务。任务执行完毕后,线程退出,这就是是“即时创建,即时销毁”的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提
灿哥哥
·
2018-05-19 15:15
C++11
Java
并发学习
之线程池ThreadPoolExecutor的小结
更多相关博文,欢迎查看一灰灰Blog:一灰灰Blog:《Java
并发学习
之线程池ThreadPoolExecutor的小结》本篇博文将带着问题来回顾小结多线程池相关的知识点线程池的几种创建方式线程池的优点是什么应用场景如何使用实现原理异常状况怎么处理线程池中任务的提交执行后
一灰灰blog
·
2018-05-17 17:29
Java-并发
并发学习
(六) — 线程安全的三个方面
一、线程安全性:当多个线程访问某个类,不管运行环境采用何种调度方式或者这些进程将如何调用,并且在主调代码中不需要额外的同步或协同,都能表现出正确的行为,这就是线程安全的。主要体现在三个方面:原子性:互斥访问,同一个时刻只能有一个线程来对它进行操作,如Atomic包,锁可见性:一个线程对主内存的修改可以及时的被其他线程观察的到有序性:一个线程观察其他线程中指令执行顺序,由于指令重排序存在,观察结果一
Jae_Wang
·
2018-05-17 09:00
Java并发编程
【Java
并发学习
二】多线程编程的硬件基础知识总结
这篇简单梳理下与多线程相关的硬件知识,了解它们能够让我们更清晰的了解多线程工作的本质,以及关键字synchronized、volatile、final的实现原理。我们会发现,每一个硬件部件的引入都是为了解决某些问题,然后它们又诞生了新的问题。(程序员就处在这样的永无止境的循环中……)高速缓存1.缓存概念先来说说缓存的概念,现在的处理器运行速度远大于内存的读写速度的,为了填补两者之间鸿沟,硬件设计者
MrDTree
·
2018-04-22 13:30
Java并发56:ForkJoin并发框架的原理、2种ForkJoinTask的用法以及ForkJoinPool的常用方法
[超级链接:Java
并发学习
系列-绪论]本章主要对ForkJoin并发框架进行学习,主要内容分为三个部分:ForkJoin并发框架的浅谈ForkJoin并发编程的两个实例ForkJoinPool线程池的常用方法说明
hanchao5272
·
2018-04-18 00:53
Java并发
Java并发学习实例
Java并发53:并发集合系列-基于独占锁+PriorityBlockingQueue实现的单向阻塞无界延时队列DelayQueue
[超级链接:Java
并发学习
系列-绪论][系列序章:Java并发43:并发集合系列-序章]原文地址:http://cmsblogs.com/?
hanchao5272
·
2018-04-15 15:57
DelayQueue
独占锁
阻塞队列
延时队列
Java并发
Java并发学习实例
Java并发48:并发集合系列-基于CAS算法的非阻塞双向无界队列ConcurrentLinkedDueue
[超级链接:Java
并发学习
系列-绪论][系列序章:Java并发43:并发集合系列-序章]原文地址:https://www.jianshu.com/p/602b3240afafConcurrentLinkedDeque
hanchao5272
·
2018-04-15 11:09
Java并发
Java并发学习实例
Java高
并发学习
(七)
Java高
并发学习
(7)程序中的幽灵:隐蔽的错误作为一名软件开发人员,修复BUG应该是基本的日常工作之一。作为java程序员,也许你经常会被抛出的一大堆异常堆栈所困扰。
Hu_sin
·
2018-04-02 17:42
java
高并发
线程
Java高
并发学习
(六)
Java高
并发学习
(6)线程安全的概念与synchronized并行程序开发的一大关注点是线程安全问题。由于读写者问题产生的错误,会导致数据不一致。
Hu_sin
·
2018-04-01 17:43
java
高并发
线程
Java高
并发学习
(五)
Java高
并发学习
(5)先干重要的事:线程优先级Java中的线程可以有优先级。优先级高的线程在竞争资源时更有优势。当然这只是一个概率问题。如果运气不好,高优先级的线程也可能抢占失败。
Hu_sin
·
2018-04-01 16:33
java
高并发
线程
Java高
并发学习
(四)
Java高
并发学习
(四)驻守后台:守护线程(Daemon)守护线程是一种特殊的线程,他是系统的守护者,在后台默默的完成一些系统性的服务。比如垃圾回收线程,JIT线程也可以理解为守护线程。
Hu_sin
·
2018-03-31 17:05
java
高并发
线程
Java高
并发学习
(三)
Java高
并发学习
(三)分门别类的管理:线程组在一个系统中,如果线程数量很多,而且功能分配比较明确,就可以将功能相同的线程放置在一个线程组里。
Hu_sin
·
2018-03-31 16:47
java
高并发
Java高
并发学习
(二)
Java高
并发学习
(二)volatile与java内存模型(JMM)Java的内存模型都是围绕着原子性,有序性和可见性展开的。为了在适当的场合,确保线程间的原子性,有序性,可见性。
Hu_sin
·
2018-03-31 15:19
java
高并发
线程
Java高
并发学习
(一)
Java高
并发学习
(一)初始线程:线程的基本操作进行java并发设计的第一步,就是必须了解Java虚拟机提供的线程操作的API。比如如何创建并启动线程,如何终止线程,中断线程等。
Hu_sin
·
2018-03-28 00:00
java
Java并发28:ThreadLocal学习笔记-简介、基本方法及应用场景
[超级链接:Java
并发学习
系列-绪论]本章主要对ThreadLocal进行学习。1.初始ThreadLocalThreadLocal又称为线程本地变量、线程局部变量,来源于JDK1.2版本。
hanchao5272
·
2018-03-25 22:59
ThreadLocal
数据库连接管理
session管理
线程本地变量
线程共享变量
Java并发
Java并发学习实例
Java并发27:Atomic系列-原子类型累加器XxxxAdder和XxxxAccumulator的学习笔记
[超级链接:Java
并发学习
系列-绪论][系列概述:Java并发22:Atomic系列-原子类型整体概述与类别划分]本章主要对原子累加器进行学习。
hanchao5272
·
2018-03-25 21:33
Java并发
Java并发学习实例
上一页
1
2
3
4
5
6
7
8
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他