java并发编程
文章平均质量分 84
30年后世界会是怎样
这个作者很懒,什么都没留下…
展开
-
disruptor入门
1 disruptor 是什么?Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。2011年,企业应用软件专家Martin Fowler专门撰写长文介绍。同年它还获得了Oracle官方的Duke大奖。目前,包括Apache Storm、Camel、Log4j 2在内的很多知名项目都应用了D转载 2021-04-12 11:31:35 · 338 阅读 · 0 评论 -
伪共享
1 CPU的结构下图是计算的基本结构。L1、L2、L3分别表示一级缓存、二级缓存、三级缓存,越靠近CPU的缓存,速度越快,容量也越小。所以L1缓存很小但很快,并且紧靠着在使用它的CPU内核;L2大一些,也慢一些,并且仍然只能被一个单独的CPU核使用;L3更大、更慢,并且被单个插槽上的所有CPU核共享;最后是主存,由全部插槽上的所有CPU核共享。级别越小的缓存,越接近CPU, 意味着速度越快且容量越少。L1是最接近CPU的,它容量最小,速度最快,每个核上都有一个L1 Cache(准确地说每个核转载 2021-04-12 11:35:55 · 135 阅读 · 0 评论 -
线程的生命周期及五种基本状态
Java线程具有五中基本状态新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。注...转载 2021-03-08 11:50:23 · 307 阅读 · 0 评论 -
哲学家就餐问题的解决(java实现)
前言:生产者-消费者模型和哲学家就餐问题是多线程中比较经典的两个问题.通过这两个问题,可以很好地了解和实践下java多线程的基础知识.哲学家就餐问题:有五个哲学家,他们的生活方式是交替地进行思考和进餐。他们共用一张圆桌,分别坐在五张椅子上。在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。进餐完毕,放下筷子又继续思考。对java多线程不熟悉的可以先看下生产者-消费者模型是怎么实现的,然后再独立实现哲学.原创 2020-06-29 23:03:44 · 6287 阅读 · 9 评论 -
生产者消费者模型的五种实现(java)
前言生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞。现在用四种方式来实现生产者消费者模型wait()和notify()方法的实现这也是最简单最基础的实现,缓冲区满和为空时都调用wait()方法等待,当生产者生产了一个产品或者消费者消费了一个产品之后会唤醒所有线程。/** * 生产者和消费者,wait()和notify()的实现 *转载 2020-06-29 17:35:23 · 943 阅读 · 0 评论 -
多线程 ForkJoinPool
背景ForkJoinPool的优势在于,可以充分利用多cpu,多核cpu的优势,把一个任务拆分成多个“小任务”,把多个“小任务”放到多个处理器核心上并行执行;当多个“小任务”执行完成之后,再将这些执行结果合并起来即可。这种思想值得学习。使用Java7 提供了ForkJoinPool来支持将一个任务拆分成多个“小任务”并行计算,再把多个“小任务”的结果合并成总的计算结果。ForkJoinPool是ExecutorService的实现类,因此是一种特殊的线程池。使用方法:创建了ForkJoi转载 2020-06-04 22:10:05 · 245 阅读 · 0 评论 -
为什么阿里Java规约禁止使用Java内置Executors创建线程池?
IDEA导入阿里规约插件,当你这样写代码时,插件就会自动监测出来,并给你红线提醒。告诉你手动创建线程池,效果会更好。在探秘原因之前我们要先了解一下线程池 ThreadPoolExecutor 都有哪些参数及其意义。ThreadPoolExecutor构造方法:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, .转载 2020-06-04 20:52:05 · 1151 阅读 · 0 评论 -
Java并发编程:线程池的源码分析和使用实例
Java并发编程:线程池的使用 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲解一下Java的线程池,首先我们从最核心的ThreadPoolEx转载 2020-06-04 17:48:32 · 200 阅读 · 0 评论 -
java创建线程实例
找到一篇介绍创建线程的方法的文章,在此记录下.1.继承Thread类2.实现Runnable接口(上述两种方法既可以显式创建类,也可以使用匿名内部类)3.使用FutureTask4.使用TimerTask5.java8 parallelStream()6.线程池7.Spring @EnableAsync 和@Async注解以下为实例代码(不包括6,7的实现):package com.example.demo.thread;import java.util..原创 2020-06-04 16:40:09 · 305 阅读 · 0 评论 -
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 以下是本文目录大纲: 一.CountDownLatch用法 二.CyclicBarrier用法 三.Semaphore用法 一.CountDownLatch用法 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比转载 2020-05-30 16:36:37 · 125 阅读 · 0 评论 -
Java 并发编程:volatile的使用及其原理
Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁、偏向锁) Java 并发编程:线程间的协作(wait/notify/sleep/yield/join) Java 并发编程:volatile的使用及其原理 一、volatile的作用 在《Java并发编程:核心理论》一文中,我们已经提到过可见性、有序性及原子性问题,...转载 2020-05-28 19:39:16 · 171 阅读 · 0 评论 -
Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁、偏向锁) Java 并发编程:线程间的协作(wait/notify/sleep/yield/join) Java 并发编程:volatile的使用及其原理 一、线程的状态 Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Runnin...转载 2020-05-28 19:28:59 · 176 阅读 · 0 评论 -
Java并发编程:Synchronized及其实现原理
Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁、偏向锁) Java 并发编程:线程间的协作(wait/notify/sleep/yield/join) Java 并发编程:volatile的使用及其原理 一、Synchronized的基本使用 Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单...转载 2020-05-28 19:28:22 · 147 阅读 · 0 评论 -
Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)
Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁、偏向锁) Java 并发编程:线程间的协作(wait/notify/sleep/yield/join) Java 并发编程:volatile的使用及其原理 一、重量级锁 上篇文章中向大家介绍了Synchronized的用法及其实现的原理。现在我们应该知道,Synchr..转载 2020-05-28 19:28:48 · 204 阅读 · 1 评论 -
Java 并发编程:核心理论
Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁、偏向锁) Java 并发编程:线程间的协作(wait/notify/sleep/yield/join) Java 并发编程:volatile的使用及其原理 并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程.转载 2020-05-28 19:28:28 · 152 阅读 · 0 评论