1. 什么是线程? 线程和进程的区别 在了解线程的概念前,我们应该先知道什么是进程? 进程是操作系统的基本概念之一, 它是正在执行的程序实例. * 下面的一些进程的基本概念你可以了解下 -------------------------------------------------------------------- 操作系统逻辑上将一个进程分为以下几部分(段): # 文本 程序的指令 # 数据 程序使用的静态变量 # 堆 程序可从该区域动态分配额外内存 # 栈 随函数调用和返回而增减的一片…
今天,我们开始Java高并发与多线程的第二篇,线程的实现方式. 通常来讲,线程有三种基础实现方式,一种是继承Thread类,一种是实现Runnable接口,还有一种是实现Callable接口,当然,如果我们铺开,扩展一下,会有很多种实现方式,但是归根溯源,其实都是这几种实现方式的衍生和变种. 我们依次来讲. [第一种 · 继承Thread] 继承Thread之后,要实现父类的run方法,然后在起线程的时候,调用其start方法. 1 public class DemoThreadDemoThre…
今天,我们开始Java高并发与多线程的第三篇,线程的基本属性和主要方法. [属性] 编号(ID) 类型long 用于标识不同的线程,编号唯一,只存在java虚拟机的一次运行 名称(Name) 类型String 可以不设置,默认值为Thread-线程编号 线程类别(Daemon) 类型boolean 主要用于区分用户线程和守护线程 值为true表示该线程为守护线程,否则为用户线程 默认值与相应线程的父线程该属性值相同,该属性必须在线程启动前设置!否则会报错 用户线程 用户行为运行的线程: 一个Ja…
今天,我们开始Java高并发与多线程的第四篇,锁. 之前的三篇,基本上都是在讲一些概念性和基础性的东西,东西有点零碎,但是像文科科目一样,记住就好了. 但是本篇是高并发里面真正的基石,需要大量的理解和实践,一环扣一环,环环相扣,不难,但是需要认真去读. 好了,现在开始. --------------第一部分,咱们要谈到java里面的两个用于保证线程之间有序性的关键字-------------- [synchronized] synchronized是Java中解决并发问题的一种最常用的方法,也是…
java高并发核心要点|系列1|开篇 java高并发核心要点|系列2|锁的底层实现原理 java高并发核心要点|系列3|锁的底层实现原理|ABA问题 java高并发核心要点|系列4|CPU内存指令重排序(Memory Reordering) java高并发核心要点|系列5|CPU内存伪共享…
在java高并发编程,有几个很重要的内容: 1.CAS算法 2.CPU重排序 3.缓存行伪共享 我们先来说说高并发世界中的主要关键问题是什么? 是数据共享. 因为多线程之间要共享数据,就会遇到各种问题.如下图: 如果两个线程同时写入,那怎么保证数据的一致性?是线程1先写,还是线程2先写,这是个问题.那要如何解决这个问题? 答案是:加锁. 比如,线程1先访问共享数据区,那么它就先把这块数据区锁起来.后面如果其他线程要访问这个共享区,首先要从线程1这里获取锁,才能进一步访问这个共享区.这里很好理解,…
其实之前一直想专门写一篇,单独说一说Java的多线程与高并发,但是一直以来,都没有想到能够用什么比较有趣的表现形式去表达出来,而且网上充斥着很多类似的博客,有好的又不好的,有简介的有繁琐的,所以也一直没写. 但是想了想既然之前有这个想法,而且也已经好久没有写过博客了,索性还是写一写,尽量写的有意思一点. 另:之前的高并发&性能优化没有来得及往下写,实在是因为里面的东西太过于复杂,且最近正好换了工作,确实没有那么多时间去研究,现在写东西还是希望能多写点有用的,而不是书本照搬当笔记用,当然能力有限,…
[实战Java高并发程序设计 1]Java中的指针:Unsafe类 [实战Java高并发程序设计 2]无锁的对象引用:AtomicReference [实战Java高并发程序设计 3]带有时间戳的对象引用:AtomicStampedReference [实战Java高并发程序设计 4]数组也能无锁:AtomicIntegerArray [实战Java高并发程序设计 5]让普通变量也享受原子操作 [实战Java高并发程序设计6]挑战无锁算法:无锁的Vector实现 在对线程池的介绍中,提到了一个非…
今天,我们来学习另一个重要的概念. CPU内存指令重排序(Memory Reordering) 什么叫重排序? 重排序的背景 我们知道现代CPU的主频越来越高,与cache的交互次数也越来越多.当CPU的计算速度远远超过访问cache时,会产生cache wait,过多的cache wait就会造成性能瓶颈. 针对这种情况,多数架构(包括X86)采用了一种将cache分片的解决方案,即将一块cache划分成互不关联地多个 slots (逻辑存储单元,又名 Memory Bank 或 Cache…
摘自马士兵java并发编程 一.认识Executor.ExecutorService.Callable.Executors /** * 认识Executor */ package yxxy.c_026; import java.util.concurrent.Executor; public class T01_MyExecutor implements Executor { public static void main(String[] args) { new T01_MyExecutor(…