java的平凡之路

博客的文章都是平时学习或者遇到其他人写的不错的文章分享,也是做一个记录,希望大家喜欢...

当ThreadLocal碰上线程池

ThreadLocal使用 ThreadLocal可以让线程拥有本地变量,在web环境中,为了方便代码解耦,我们通常用它来保存上下文信息,然后用一个util类提供访问入口,从controller层到service层可以很方便的获取上下文。下面我们通过代码来研究一下ThreadLocal。 新建...

2018-07-31 15:52:29

阅读数:126

评论数:0

虚拟机内的锁优化(偏向锁,轻量级锁,自旋锁,重量级锁)

基础知识之一:锁的类型锁从宏观上分为:(1)乐观锁;(2)悲观锁。(1)乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取的方式是在写时先读出当前版本号,然后加锁操作...

2018-06-05 10:28:53

阅读数:40

评论数:0

轻松学习java可重入锁(ReentrantLock)的实现原理

前言相信学过java的人都知道 synchronized 这个关键词,也知道它用于控制多线程对并发资源的安全访问,兴许,你还用过Lock相关的功能,但你可能从来没有想过java中的锁底层的机制是怎么实现的。如果真是这样,而且你有兴趣了解,今天我将带领你轻松的学习下java中非常重要,也非常基础的可...

2018-05-31 11:35:55

阅读数:44

评论数:0

Java并发包基石-AQS详解

目录    1 基本实现原理      1.1 如何使用       1.2 设计思想    2 自定义同步器      2.1 同步器代码实现       2.2 同步器代码测试    3 源码分析      3.1 Node结点       3.2 独占式       3.3 共享式    4...

2018-05-30 18:21:03

阅读数:105

评论数:0

【多线程高并发】多线程的设计模式

关键字::多线程设计模式,Future模式,Master-Worker模式,生产者-消费者模型 github 地址: https://github.com/zhaikaishun/concurrent_programming 本篇文章代码在Multi_004 中多线程的设计模式代码在Multi_0...

2018-05-30 10:43:33

阅读数:87

评论数:0

java 多线程并发系列之 生产者消费者模式的两种实现

生产者消费者模式是并发、多线程编程中经典的设计模式,生产者和消费者通过分离的执行工作解耦,简化了开发模式,生产者和消费者可以以不同的速度生产和消费数据。真实世界中的生产者消费者模式生产者和消费者模式在生活当中随处可见,它描述的是协调与协作的关系。比如一个人正在准备食物(生产者),而另一个人正在吃(...

2018-05-30 09:27:43

阅读数:71

评论数:0

理解线程池的原理

读完本文你将了解:什么是线程池线程池的处理流程保存待执行任务的阻塞队列创建自己的线程池JDK 提供的线程池及使用场景newFixedThreadPoolnewSingleThreadExecutornewCachedThreadPoolnewScheduledThreadPool两种提交任务的方法...

2018-05-29 10:49:48

阅读数:52

评论数:0

JVM 并发性: 使用 Akka 执行异步操作

本 系列 中以前的文章介绍了如何通过以下方式实现并发性:并行地在多个数据集上执行相同的操作(就像 Java 8 流一样)显式地将计算构建成异步执行某些操作,然后将结果组合在一起(就像 future 一样)。这两种方法都是实现并发性的不错方式,但是您必须将它们明确地设计到应用程序中。在本文和接下来的...

2018-05-28 18:24:24

阅读数:897

评论数:0

Coroutine in Java - Quasar Fiber实现

简介说到协程(Coroutine),很多人会想到go,lua,erlang等语言,其实JVM上也有蛮多的实现,如PicoThread,Kilim,Quasar等,本文主要介绍其中一种Coroutine实现 -- Quasar Fiber,Quasar Fiber相对来说流行度更好一些,如果之前没有...

2018-05-25 15:45:20

阅读数:271

评论数:0

继续了解Java的纤程库 – Quasar

前一篇文章Java中的纤程库 – Quasar中我做了简单的介绍,现在进一步介绍这个纤程库。Quasar还没有得到广泛的应用,搜寻整个github也就pinterest/quasar-thrift这么一个像样的使用Quasar的库,并且官方的文档也很简陋,很多地方并没有详细的介绍,和Maven的集...

2018-05-25 15:43:35

阅读数:766

评论数:0

Java中的纤程库 – Quasar

最近遇到的一个问题大概是微服务架构中经常会遇到的一个问题:服务 A 是我们开发的系统,它的业务需要调用 B、C、D 等多个服务,这些服务是通过http的访问提供的。 问题是 B、C、D 这些服务都是第三方提供的,不能保证它们的响应时间,快的话十几毫秒,慢的话甚至1秒多,所以这些服务的Latency...

2018-05-25 15:40:18

阅读数:66

评论数:0

浅谈我对协程的理解

一句话说明什么是线程:协程是一种用户态的轻量级线程。一句话并不能完全概括协程的全部,但是起码能让我们对协程这个概念有一个基本的印象。从硬件发展来看,从最初的单核单CPU,到单核多CPU,多核多CPU,似乎已经到了极限了,但是单核CPU性能却还在不断提升。server端也在不断的发展变化。如果将程序...

2018-05-25 11:43:48

阅读数:394

评论数:0

进程和线程、协程的区别

现在多进程多线程已经是老生常谈了,协程也在最近几年流行起来。python中有协程库gevent,py web框架tornado中也用了gevent封装好的协程。本文主要介绍进程、线程和协程三者之间的区别。一、概念  1、进程进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进...

2018-05-25 11:28:45

阅读数:273

评论数:0

java-线程同步

线程世界出现了一把锁幸好还是又聪明人的,有人想到了一个解决问题的好方法。虽然不知道谁想到的注意,但是这个注意确实解决了一部分问题,解决的方案是加锁。你想要进行对一组加锁的代码进行操作吗?想的话就先去抢到锁,拿到锁之后就可以对被加锁的代码为所欲为了,倘若拿不到锁的话就只能在代码块门口等着,因为等的线...

2018-05-24 09:23:53

阅读数:52

评论数:0

聊聊并发-Java中的Copy-On-Write容器

读的时候不需要加锁,如果读的时候有多个线程正在向ArrayList添加数据,读还是会读到旧的数据,因为写的时候不会锁住旧的ArrayList。 JDK中并没有提供CopyOnWriteMap,我们可以参考CopyOnWriteArrayList来实现一个,基本代码如下: ...

2017-08-22 09:10:36

阅读数:229

评论数:0

Java 并发集合的实现原理

本文简要介绍Java并发编程方面常用的类和集合,并介绍下其实现原理。 AtomicInteger 可以用原子方式更新int值。类 AtomicBoolean、AtomicInteger、AtomicLong 和 AtomicReference 的实例各自提供对相应类型单个变量的访问和更...

2017-08-18 09:56:39

阅读数:176

评论数:0

Java 线程池(ThreadPoolExecutor)原理分析与使用

在我们的开发中“池”的概念并不罕见,有数据库连接池、线程池、对象池、常量池等等。下面我们主要针对线程池来一步一步揭开线程池的面纱。 使用线程池的好处 1、降低资源消耗 这里提到了线程池的饱和策略,那我们就简单介绍下有哪些饱和策略: AbortPolicy 为J...

2017-08-17 10:12:15

阅读数:128

评论数:0

Java 线程池的理论与实践

前段时间公司里有个项目需要进行重构,目标是提高吞吐量和可用性,在这个过程中对原有的线程模型和处理逻辑进行了修改,发现有很多基础的多线程的知识已经模糊不清,如底层线程的运行情况、现有的线程池的策略和逻辑、池中线程的健康状况的监控等,这次重新回顾了一下,其中涉及大量java.util.concurre...

2017-08-17 10:11:22

阅读数:168

评论数:0

Java 多线程并发编程之 Synchronized 关键字

synchronized 关键字解析 同步锁依赖于对象,每个对象都有一个同步锁。 现有一成员变量 Test,当线程 A 调用 Test 的 synchronized 方法,线程 A 获得 Test 的同步锁,同时,线程 B 也去调用 Test 的 synchronized 方法,此时线...

2017-08-16 09:33:43

阅读数:127

评论数:0

java线程并发基础

CPU、进程、线程 我们知道进程是操作系统进行资源分配的最小单位,一个进程内部可以有多个线程进行资源的共享,线程作为CPU调度的最小单位,CPU会依据某种原则(比如时间片轮转)对线程进行上下文切换,从而并发执行多个线程任务。 打个比喻,CPU就像高速公路一样,每条高速公路会有并排的车道...

2017-08-16 09:31:47

阅读数:103

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭