并发编程
文章平均质量分 87
dd-moeny
无论什么时候,再困难也要咬牙挺住。不为别的,就因为我们是男人。
展开
-
ThreadLocalRandom——Random在大并发环境下的替代者
随机数随机数在科学研究与工程实际中有着极其重要的应用!简单来说,随机数就是一个数列,这个数列可能满足一定的概率分布,又获取其满足的分布并不为我们所知。数学方法产生随机数应该称之为“伪随机数”,只有使用物理方法才能得到真正的随机数!因此我们使用计算机产生的随机数都是"伪随机数"。那么计算机到底是怎么产生随机数的呢?这时就要提到随机数发生器了。随机数发生器我们高中的时候都学过数列的知识,上面提到随机数可以看成是一个数列,那么我们可以将随机数发生器看成是一个数列表达式。比如现在有下面两个随机说原创 2021-08-02 00:29:13 · 138 阅读 · 0 评论 -
InheritableThreadLocal使用详解
引子public class InheritableThreadLocalDemo { private static ThreadLocal<String> threadLocal = new ThreadLocal<>(); public static void main(String[] args) { threadLocal.set("mainThread"); System.out.println("value:"+t原创 2021-08-01 17:41:20 · 259 阅读 · 0 评论 -
ThreadLocal 其实很简单
什么是ThreadLocalThreadLocal有点类似于Map类型的数据变量。ThreadLocal类型的变量每个线程都有自己的一个副本,某个线程对这个变量的修改不会影响其他线程副本的值,可以说ThreadLocal为我们提供了一个保证线程安全的新思路。需要注意的是一个ThreadLocal变量,其中只能set一个值。ThreadLocal<String> localName = new ThreadLocal();localName.set("name1");String n原创 2021-08-01 17:40:18 · 165 阅读 · 0 评论 -
线程状态解析
线程的几种状态在Java中,一个线程从创建到消亡会经历新建状态(New)、就绪状态(Runnable)、运行状态(Running)、等待(Waiting)、阻塞状态(Blocked)和死亡状态。在运行过程中,线程会在这几个状态之间流转。下面对这几种状态做下简单解释: 新建状态(New): 新创建了一个线程对象,还未调用线程的start()方法。 就绪状态(Runnable): 线程对象创建后,其他线程调用了该对象的start()方法,该状态的线程位于可运行线程池中,变得可运行,等原创 2021-08-01 17:39:20 · 854 阅读 · 0 评论 -
Object的wait、notify和notifyAll方法
方法简介wait方法当一个线程调用一个共享变量的wait()方法时,该调用线程会被阻塞挂起(进入waiting状态),直到发生下面几件事情之一才能返回:其他线程调用了该共享对象的notify()或者notifyAll()方法; 其他线程调用了该线程的interrupt()方法,该线程抛出InterruptedException异常返回。另外需要注意的是,如果调用wait()方法的线程没有事先获取该对象的监视器锁,则调用wait()方法时调用线程会抛出IllegalMonitorStateEx原创 2021-08-01 17:38:26 · 318 阅读 · 0 评论 -
Thread类的详细介绍
Thread类简介Thread类是Java中实现多线程编程的基础类。本篇博客就来介绍下Thread类的常用API和常见用法。Thread类常用的方法如下:Thread.activeCount():这个方法用于返回当前线程的线程组中活动线程的数量,返回的值只是一个估计值,因为当此方法遍历内部数据结构时,线程数可能会动态更改。)。 Thread.checkAccess(): 检验当前正在执行的线程是否有权限修改thread的属性,这个方法我们一般不自己进行调用,Thread类的set方法在进行属性原创 2021-08-01 17:36:49 · 5938 阅读 · 2 评论 -
实现多线程的几种方式
在Java中有多种方式可以实现多线程编程(记得这是一道常问的面试题,特别是在应届生找工作的时候被问的频率就更高了)。继承Thread类并重写run方法; 实现Runnable接口,并将这个类的实例当做一个target构造Thread类 实现Callable接口;继承Thread类通过继承Thread类来实现多线程编程很容易。下面代码中MyThread类继承了Thread类,并重写了run方法。但是这种方式不是很建议使用,其中最主要的一个原因就是Java是单继承模式,MyThread类继承了原创 2021-08-01 17:34:28 · 259 阅读 · 0 评论 -
上下文切换的确切含义了解下
上下文切换的含义其实在单个处理器的时期,操作系统就能处理多线程并发任务。处理器给每个线程分配 CPU 时间片(Time Slice),线程在分配获得的时间片内执行任务。CPU 时间片是 CPU 分配给每个线程执行的时间段,一般为几十毫秒。在这么短的时间内线程互相切换,我们根本感觉不到,所以看上去就好像是同时进行的一样。时间片决定了一个线程可以连续占用处理器运行的时长。当一个线程的时间片用完了,或者因自身原因被迫暂停运行了,这个时候,另外一个线程(可以是同一个线程或者其它进程的线程)就会被操作系统原创 2021-08-01 17:33:38 · 502 阅读 · 1 评论 -
并发编程中你需要知道的基础概念
多线程是Java编程中一块非常重要的内容,其中涉及到很多概念。这些概念我们平时经常挂在嘴上,但是真的要让你介绍下这些概念,你可能还真的讲不清楚。这篇博客就总结下多线程编程中经常用到的概念,理解这些概念能帮助我们更好地掌握多线程编程。进程(Process)与线程(Thread)进程和线程是最常提到的概念了。在linux中,线程与进程最大的区别就是是否共享同一块地址空间,而且共享同一块地址空间的那一组线程将显现相同的PID号。下面介绍下两者的概念:进程是操作系统进行资源分配和调度的最小单元,可以简单原创 2021-08-01 17:32:37 · 113 阅读 · 0 评论 -
Java对并发编程的支持历史
1. JDK1.4及之前在JDK1.4及之前的版本,主要提供的并发技术有:synchronized关键字 volatile关键字 不变模式(不可变类)1.1 volatile关键字#引用百度百科的解释:volatile是一个类型修饰符(type specifier),就像大家更熟悉的const一样,它是被设计用来修饰被不同线程访问和修改的变量。volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。注:百度百科的解释并不是专门针对jav原创 2021-08-01 17:31:26 · 115 阅读 · 0 评论 -
摩尔定律失效“带来”并行编程
并发和并行#在真正开始聊本文的主题之前,我们先来回顾下两个老生常谈的概念:并发和并行。并发:是指多个线程任务在同一个CPU上快速地轮换执行,由于切换的速度非常快,给人的感觉就是这些线程任务是在同时进行的,但其实并发只是一种逻辑上的同时进行; 并行:是指多个线程任务在不同CPU上同时进行,是真正意义上的同时执行。下面贴上一张图来解释下这两个概念:上图中的咖啡就可以看成是CPU,上面的只有一个咖啡机,相当于只有一个CPU。想喝咖啡的人只有等前面的人制作完咖啡才能制作自己的开发,也就是同.原创 2021-08-01 17:28:46 · 320 阅读 · 0 评论