Java内存模型 - 简介

Java内存模型的基础 在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步,通信指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 Java语言的并发采用的是共享内存模型,Java线程之间的通信总是隐式进行,整个通信过程对程序员完全透明 ... »

Java多线程与并发基础

CS-LogN思维导图:记录专业基础 面试题 开源地址:https://github.com/FISHers6/CS-LogN 多线程与并发基础 实现多线程 面试题1:有几种实现线程的方法,分别是什么 1.继承Thread类,启动线程的唯一方法就是通过 Thread 类的 start()实例方法,s ... »

关于Synchronized的偏向锁,轻量级锁,重量级锁,锁升级过程,自旋优化,你该了解这些

前言 相信大部分开发人员,或多或少都看过或写过并发编程的代码。并发关键字除了Synchronized(如有不懂请移至传送门,关于Synchronized的偏向锁,轻量级锁,重量级锁,锁升级过程,自旋优化,你该了解这些 ),还有另一大分支Atomic。如果大家没听过没用过先看基础篇,如果听过用过,请滑 ... »

15分钟让你了解如何实现并发中的Barrier

说到Barrier,很多语言中已经是标准库中自带的概念,一般情况下,只需要直接使用就行了。而最近一些机缘巧合的机会,我需要在c++中使用这么个玩意儿。但是c++标准库里还没有这个概念,只有boost里面有这样现成的东西,而我又不想为了这么一个小东西引入个boost。所以,我借着这个机会研究了下,发现 ... »

对ThreadLocal的一些理解

ThreadLocal也是在面试过程中经常被问到的,本文主要从以下三个方面来谈对ThreadLocal的一些理解: ThreadLocal用在什么地方 ThreadLocal一些细节 ThreadLocal的最佳实践 ThreadLocal用在什么地方? 讨论ThreadLocal用在什么地方前,我 ... »

Java并发-CopyOnWriteArrayList

前言 今天我们一起学习下java.util.concurrent并发包里的 "CopyOnWriteArrayList" 工具类。当有多个线程可能同时遍历、修改某个公共数组时候,如果不希望因使用 synchronize 关键字锁住整个数组而影响性能,可以考虑使用CopyOnWriteArrayLis ... »

Java面试题必备知识之ThreadLocal

老套路,先列举下关于ThreadLocal常见的疑问,希望可以通过这篇学习笔记来解决这几个问题: 1. ThreadLocal是用来解决什么问题的? 2. 如何使用ThreadLocal? 3. ThreadLocal的实现原理是什么? 4. 可否举几个实际项目中使用ThreadLocal的案例? ... »

自己实现定制自己的专属java锁,来高效规避不稳定的第三方

java juc 包下面已经提供了很多并发锁工具供我们使用,但在日常开发中,为了各种原因我们总是会用多线程来并发处理一些问题,然而并不是所有的场景都可以使用juc 或者java本身提供的锁来方便的帮助我们控制多线程带来的并发问题,这个时候就需要我们根据自己的业务场景来子实现定制一把我们自己专属的锁, ... »

Java线程池源码及原理

Java线程池的原理,主要参数的作用。ThreadPoolExecutor内部有重要的成员变量ctl,类型是AtomicInteger,低29位表示线程池中线程数,通过高3位表示线程池的运行状态。addWorker的逻辑,runWorker的逻辑 ... »

吃个快餐都能学到串行、并行、并发

Java 多线程系列文章第 3 篇 这篇文章继续来唠唠概念,讲这三兄弟: 串行(Serial) 、 并行(Parallel) 、 并发(Concurrent) 。 吃快餐 出门在外吃饭是一件头疼的事,用我大学舍友一句话形容:如果不是没吃饭不能活,他是不会吃饭的。不管学生还是工作者,吃饭都是一件需要揪 ... »

你真的会用mysql行级锁吗?mysql 行级锁全解析

在互联网大并发应用大行其道的今天,应用的开发总是离不开锁,在分布式应用中,最常见的莫过于基于数据库的行级锁了,由于互联网公司中比较主流的数据库还是mysql,所以这一话题绕不开的就是mysql了,但是由于mysql中innoDb引擎特殊的机制,经常一不小心就会发生死锁,本次咱们就来聊一聊基于mysq ... »

精通并发与 Netty (一)如何使用

精通并发与 Netty Netty 是一个异步的,事件驱动的网络通信框架,用于高性能的基于协议的客户端和服务端的开发。 异步指的是会立即返回,并不知道到底发送过去没有,成功没有,一般都会使用监听器来监听返回。 事件驱动是指开发者只需要关注事件对应的回调方法即可,比如 channel active,i ... »

等待唤醒(wait / notify)机制

如果一个线程从头到尾执行完也不和别的线程打交道的话,那就不会有各种安全性问题了。但是协作越来越成为社会发展的大势,一个大任务拆成若干个小任务之后,各个小任务之间可能也需要相互协作最终才能执行完整个大任务。所以各个线程在执行过程中可以相互 ,所谓 就是指相互交换一些数据或者发送一些控制指令,比如一个线 ... »

清晰易懂的进程与线程之间的区别

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。 1、计算机的核心是 CPU ,它承担了所有的计算任务。它就像一座 工厂 ,时刻在运行。 2、假定工厂的电力有限,一次只能供给一个车间 ... »

就这样,使用guava快速创建两级缓存能力

首先,咱们都有一共识,即可以使用缓存来提升系统的访问速度! 现如今,分布式缓存这么强大,所以,大部分时候,我们可能都不会去关注本地缓存了! 而在一起高并发的场景,如果我们一味使用nosql式的缓存,如 redis, 那么也是好的吧! 但是有个问题我们得考虑下: redis 这样的缓存是快,但是它总有 ... »

java 并发——理解 wait / notify / notifyAll

一、前言 前情简介: "java 并发——内置锁" "java 并发——线程" java 面试是否有被问到过,sleep 和 wait 方法的区别,关于这个问题其实不用多说,大多数人都能回答出最主要的两点区别: sleep 是线程的方法, wait / notify / notifyAll 是 Ob ... »

(白话理解)CAS机制

(白话理解)CAS机制 通过一段对话我们来了解cas用意 示例程序:启动两个线程,每个线程中让静态变量count循环累加100次。 最终输出的count结果是什么呢?一定会是200吗? 加了同步锁之后,count自增的操作变成了原子性操作,所以最终的输出一定是count=200,代码实现了线程安全。 ... »

为什么300的并发能把支持最大连接数4000数据库压死?

问: 为什么300的并发能把支持最大连接数4000数据库压死? 买了一台数据库,最大连接数的参数是 4000,看起来很棒!但是 cpu 和内存并不咋好!是 2c4g的超低配制。 但是想着反正业务量也不大,不如先扛着,等业务量上来再进行升配! 没过多久,进行一次小量的营销活动。精力计算想了下,大量3- ... »