链滴
社区愿景和功能特性
优雅的 Markdown 所见即所得编辑
快捷键交互
随时自由编辑分享内容
支持注销账号来去自由
分布式社区网络
开放 API
产品
Symphony 社区系统(Java)
Solo 博客系统(Java)
Vditor 编辑器(TypeScript)
思源笔记(Electron、Go)
Pipe 博客平台(Vue、Go)
发展计划表
发展简史
榜单
GitHub 仓库排行
帖子打赏排行
Solo 博客端排行
积分排行
活跃度排行
贡献排行
本站基于开源项目 Sym
编程代码问答
登录
注册
首页
>
标签
并发
75
引用 •
73
回帖 •
1
关注 •
472
浏览
参与讨论
关注
关注
分享
HashTable
2
引用
秒杀
8
引用 •
3
回帖 •
1
关注
并发编程
2
引用 •
6
回帖
面试
面试造航母,上班拧螺丝。多面试,少加班。
325
引用 •
1395
回帖 •
3
关注
线程
123
引用 •
111
回帖 •
3
关注
CAS
13
引用 •
21
回帖
算法
437
引用 •
254
回帖 •
24
关注
默认
热议
好评
优选
最近回帖
关注者
查看所有标签
线程池使用与原理
[图片] 概述 在大型项目中,在代码中直接创建线程是不允许的,如果需要使用多线性则必须通过线程池了创建,因而了解线程池的使用规范以及底层实现是非常有必要的。 使用 预想的用法 但说到线程池,我们可能首先会类比连接池这类池化资源,会以为线程池是通过 acquire() 来获取资源,通过 release() 来释放资源,就 ..
165
3 年前
面试官: 都说阻塞 I/O 模型将会使线程休眠,为什么 Java 线程状态却是 RUNNABLE?
[图片] 使用 Java 阻塞 I/O 模型读取数据,将会导致线程阻塞,线程将会进入休眠,从而让出 CPU 的执行权,直到数据读取完成。这个期间如果使用 jstack 查看线程状态,却可以发现 Java 线程状态是处于 RUNNABLE,这就和上面说的存在矛盾,为什么会这样? 上面的矛盾其实是混淆了操作系统线程状态与 ..
412
5 年前
Java 高并发秒杀 API 性能瓶颈分析
业务场景 [图片] 红色标块 表示可能出现的并发较高的地方,详情页可能会不断刷新,或许系统时间,因为Java `new`一个对象返回并不耗计算时间,这个操作可以1秒完成几亿次,地址暴露接口和执行秒杀接口是性能瓶颈。 秒杀列表页 [图片] 秒杀详情页 [图片] 用户会一直刷新秒杀详情页直到有秒杀的按钮为止 针对这种用户行 ..
688
7 年前
并发之痛 Thread,Goroutine,Actor
聊这个话题之前,先梳理下两个概念,几乎所有讲并发的文章都要先讲这两个概念: [图片] 并发(concurrency) 并发的关注点在于任务切分。举例来说,你是一个创业公司的 CEO,开始只有你一个人,你一人分饰多角,一会做产品规划,一会写代码,一会见客户,虽然你不能见客户的同时写代码,但由于你切分了任务,分配了时间片, ..
318
6 年前
Java 并发编程之(一)常用概念 (转)
本文主要介绍在并发与多线程编程中常用的一些词汇以及简单解释,主要包括了可见性、原子性、活跃性、线程安全等重要概念。 可见性 所谓的可见性,就是在多线程环境下,一个线程的改动能够被其他线程看见。通常在多线程环境下,每个线程都有自己的线程空间,线程创建的时候,会将主线程变量拷贝一份到线程空间中,线程中进行的更改会立即在线程 ..
165
8 年前
并发编程学习笔记
并发编程基础 上下文切换 上下文切换是CPU中一个消耗较大的操作,要尽量减少上下文切换,一些方法: 无锁并发编程。避免使用锁,用Hash等方法,分散竞争 CAS算法。也叫乐观锁算法,低冲突的时候特别高效率 避免创建不必要的线程。 协程。在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换(稍后了解) 生产环境中 ..
298
8 年前
并发原理篇:锁
并发原理篇:锁 前言 最近在上操作系统的课,刚讲完了进程篇,但老师只是给我们勾画出进程的轮廓,所以在此总结进程并发的相关内容,希望勾勒出她貌美的容貌。 这次内容主要分成三个模块去讲述 (也可以看目录哈) 并发面临的问题 如何解决问题——锁 锁的实现原理 何为进程,何为线程 在学习 OS 的时候,提到最多的一个概念便是进 ..
1.3K
8 年前
求 Java 好书推荐
希望大家可以将自己在学习过程中看到的好书分享出来,不光是 JAVA 知识,解决特定问题方面的也都可以啊,如做搜索,分布式,高并发,数据库优化等
411
8 年前
Java 内存模型及其原理
[图片] 概述 在《'Java 并发知识梳理'》这篇文章中曾说道:在并发领域由于可见性问题、原子性问题、有序性问题,从而会导致并发场景下,结果的不确定性,为了解决可见性和有序性导致的问题,Java 构建出了一套内存模型。因而本文就主要谈一谈 Java 内存模型的设计思路以及其原理。 从三个问题说起 缓存导致可见性问题 ..
158
3 年前
多线程之线程池小纪
[图片] 关于我是线程池 并发总是离不开多线程,多线程的应用能够更好地帮助我们协调利用 CPU、Memory、Net、I/O 等系统资源。频繁的创建、销毁线程会浪费大量的系统资源,增加并发编程的风险。利用线程池可以实现类似主次线程隔离、定时执行、定时执行、周期执行等任务。作用包括: 利用线程池管理并复用线程、控制最大并 ..
135
5 年前
Java 多线程并发第一步
多线程-执行屏障 最近在看 Java 多线程的内容,看到个有意思的[链接],看了多线程部分的一道简单的题。。。 嗯。。。果然是一点都不会。 看了别人的答案和解释,结合百度才算是明白答案。 1114.按序打印(这是原题) 难度:简单 我们提供了一个类: public class Foo { public void one ..
183
5 年前
synchronized 的原理及应用
[图片] 概述 在之前的一篇文章《'Java 内存模型及其原理' 》这篇文章中,曾经介绍过 synchronized 关键字的作用,解决的是多个线程之间访问资源的同步性,保证被 synchronized 修饰的代码具有原子性。因而在本篇文章将会深入了解 synchronized 的使用方式以及原理。 使用 synchr ..
177
3 年前
线程与线程池
1、CPU CPU 并不知道线程进程之类的概念 CPU 只知道两件事: 从内存中取出指令 执行指令,然后回到 1 [图片] Q1:CPU 从哪里取出指令? PC 寄存器(Program Counter),也就是程序计数器,可以把寄存器理解为存取速度更快的内存。 Q2:PC 寄存器中存放的是什么? 存放的是指 ..
117
4 年前
I/O 与零拷贝
【整理】【原文:[http://www.52im.net/thread-3280-1-1.html 】 1、什么是 I/O? I/O 就是简单的数据 copy。 Q1:既然是 copy 数据,那么从哪里 copy 到哪里? 数据从外部设备 copy 到内存就是 Input, 数据从内存 copy 到外部设备就是 Out ..
136
4 年前
Java 并发知识梳理
[图片] 概述 随着摩尔定律逐步失效,cpu 单核性能达到瓶颈,并发逐渐逐渐得到广泛应用,因而学习了解以及使用并发就显得十分重要。但并发相关的知识比较琐碎,不易系统学习,因而本篇文章参照王宝令老师《Java 并发编程》来勾勒出一张“并发全景图”。 是什么? 用学术定义来说就是 并发:同一时间段,多个任务都在执行 (单位 ..
184
3 年前
Java 并发编程(五)线程池
[图片] 线程池顶级接口 Executor Executor 接口为线程池的顶级接口,其 executor() 方法接收一个 Runnable 实现类对象,定义了在使用线程池时,如何调用线程中的业务逻辑。 class DirectExecutor implements Executor { public void ..
138
5 年前
1、创建线程的四种方式
创建线程的四种方式 本质上都是实现 Runnable 接口 1、继承 Thread 类 public class TestThread extends Thread{ public static void main(String[] args) { TestThr ..
96
2 年前
最好理解的 rust 线程池实现
简单并发实现 网上超级多类似代码,我也是学他们的。我总结了一下并运用了一点自己的理解,使代码运行逻辑看起来更加直观和好理解。随口一提,rust 语言圣经提到“编译器驱动编程”,这个观点我觉得很有趣,意思就是只要知识储备足够,就能先手写出来想要的函数名字,根据函数名字下面的波浪线提示把整个实际功能写出来。不得不说第一次学 ..
99
1 年前
从生命周期的角度看线程和进程之间的异同
[图片] 概述 进程与线程想必都不陌生,两者有诸多相同点,甚至可以这样说,线程就是“轻量级的进程”。而且两者基本的五个状态也几乎一样,但进程和线程在状态切换时的触发条件却有诸多不同,因而本文从“生命周期”的角度去谈一谈两者之间的异同。 联系 就从状态本身而言,两者的状态类别和对应含义几乎是完全一致的分别为: 初始状态: ..
248
4 年前
Atomic 原子类的使用及其原理
概述 Atomic,在化学中原子指的是不可分割的实体。同样的在并发体系中,原子类则是所有操作都具有原子性的,也就是说它的一个操作一旦开始,就不会被其他线程干扰。同时原子类是'并 java 并发体系'中,无锁方案的重要组成部分。 在之前的文章中--'并发知识梳理',这篇文章中我们提出了累加器问题: 当多个线程同时访问下边 ..
175
3 年前
上哪里去找一个高并发的需求。。。
如题
250
5 年前
Thread.join() 的原理分析
[图片] 一、Thread.join()方法的作用 首先,说到 Thread.join()方法,如果我们了解过 java 并发知识的同学可能都知道,我们可以用 Thread.join()方法来控制线程的执行顺序,顾名思义也能知道,join 嘛,加入的意思,也就是让当前正在执行的线程等待,让加入的线程先执行完,然后唤醒当 ..
514
5 年前
寻找高并发处理最优方案
186
4 年前
Java 并发编程(四)并发容器
[图片] 并发容器的引出: 售票问题 有 N 张火车票,每张票都有一个编号同时有 10 个窗口对外售票,请写一个模拟程序。 实现 1:使用 List-非原子性操作 public class TicketSeller1 { static List tickets = new ArrayList<>(); ..
107
5 年前
Java 并发编程(三)可重入锁 ReentrantLock
[图片] ReentrantLock 的使用 ReentrantLock 可以完全替代 synchronized,提供了一种更灵活的锁. ReenTrantLock 必须手动释放锁,为防止发生异常,必须将同步代码用 try 包裹起来,在 finally 代码块中释放锁. public class T { Reentra ..
161
5 年前
Java 并发编程(二)线程同步
[图片] synchronized 关键字 1、对某个对象加锁 public class T { private int count = 10; private final Object lock = new Object(); public void m() { synchronized (lock) { // 任何 ..
101
5 年前
Java 并发编程(一)多线程基础
[图片] 线程简介 学习多线程之前,我们先要了解几个关于多线程有关的概念。 进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可 ..
139
5 年前
进程 Vs 线程、并发 Vs 并行
进程 Vs 线程、并发 Vs 并行 CPU 核心数跟线程数的关系? 对于一个 CPU,线程数 >=核心数 也就是说,一个核心最少可以对应一个线程,但通过超线程技术,一个 CPU 核心可以同时运行俩个线程。 线程数可等同于在某一时刻,CPU 并行执行任务的数量。 进程 Vs 线程 何为进程? 进程是一个具有独立功能 ..
252
5 年前
Java 线程池
线程池 为什么要用线程池 如果有大量的任务需要并发执行,但是每个任务只需要执行很短的时间就执行完成,这样就会频繁的创建-> 销毁线程,这样反而会浪费系统资源。 那么有没有一种办法可以让线程执行完一个任务后,不进行销毁而是转去执行其它未完成的任务,这样就可以实现线程复用,而不用频繁的创建销毁线程,把时间、资源都浪费 ..
118
5 年前
CAS 与 Auomic 原子类
CAS 与 Auomic 原子类 什么是原子操作? '原子操作(atomic operation)是不需要 synchronized',这是多线程编程的老生常谈了。所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。 Ja ..
279
5 年前
Fork/Join 框架 & CountDownLatch 与 CyclicBarrier
Java 并发工具类 Fork/Join '分而治之' “分而治之”:就是将一个复杂的计算,按照设定的阈值分解成多个小计算,然后将各个小计算的计算结果进行汇总。 Fork/Join 框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时,即达到阈值以下)再将一个个小任务计算的结果进行 ..
307
5 年前
Java 多线程基础 & 线程间的协作与共享。
Java 并发编程基础 线程基础类 Java 中创建一个线程有三种方式: 通过继承 Thread 类。 通过实现 Runnable 接口。 通过 Callable 和 Future 创建线程。 public class NewThread { //runnable接口实现类 private static class U ..
175
5 年前