多线程
文章平均质量分 87
dd-moeny
无论什么时候,再困难也要咬牙挺住。不为别的,就因为我们是男人。
展开
-
ThreadLocalRandom——Random在大并发环境下的替代者
随机数随机数在科学研究与工程实际中有着极其重要的应用!简单来说,随机数就是一个数列,这个数列可能满足一定的概率分布,又获取其满足的分布并不为我们所知。数学方法产生随机数应该称之为“伪随机数”,只有使用物理方法才能得到真正的随机数!因此我们使用计算机产生的随机数都是"伪随机数"。那么计算机到底是怎么产生随机数的呢?这时就要提到随机数发生器了。随机数发生器我们高中的时候都学过数列的知识,上面提到随机数可以看成是一个数列,那么我们可以将随机数发生器看成是一个数列表达式。比如现在有下面两个随机说原创 2021-08-02 00:29:13 · 113 阅读 · 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 · 229 阅读 · 0 评论 -
ThreadLocal 其实很简单
什么是ThreadLocalThreadLocal有点类似于Map类型的数据变量。ThreadLocal类型的变量每个线程都有自己的一个副本,某个线程对这个变量的修改不会影响其他线程副本的值,可以说ThreadLocal为我们提供了一个保证线程安全的新思路。需要注意的是一个ThreadLocal变量,其中只能set一个值。ThreadLocal<String> localName = new ThreadLocal();localName.set("name1");String n原创 2021-08-01 17:40:18 · 141 阅读 · 0 评论 -
线程状态解析
线程的几种状态在Java中,一个线程从创建到消亡会经历新建状态(New)、就绪状态(Runnable)、运行状态(Running)、等待(Waiting)、阻塞状态(Blocked)和死亡状态。在运行过程中,线程会在这几个状态之间流转。下面对这几种状态做下简单解释: 新建状态(New): 新创建了一个线程对象,还未调用线程的start()方法。 就绪状态(Runnable): 线程对象创建后,其他线程调用了该对象的start()方法,该状态的线程位于可运行线程池中,变得可运行,等原创 2021-08-01 17:39:20 · 770 阅读 · 0 评论 -
Object的wait、notify和notifyAll方法
方法简介wait方法当一个线程调用一个共享变量的wait()方法时,该调用线程会被阻塞挂起(进入waiting状态),直到发生下面几件事情之一才能返回:其他线程调用了该共享对象的notify()或者notifyAll()方法; 其他线程调用了该线程的interrupt()方法,该线程抛出InterruptedException异常返回。另外需要注意的是,如果调用wait()方法的线程没有事先获取该对象的监视器锁,则调用wait()方法时调用线程会抛出IllegalMonitorStateEx原创 2021-08-01 17:38:26 · 286 阅读 · 0 评论 -
Thread类的详细介绍
Thread类简介Thread类是Java中实现多线程编程的基础类。本篇博客就来介绍下Thread类的常用API和常见用法。Thread类常用的方法如下:Thread.activeCount():这个方法用于返回当前线程的线程组中活动线程的数量,返回的值只是一个估计值,因为当此方法遍历内部数据结构时,线程数可能会动态更改。)。 Thread.checkAccess(): 检验当前正在执行的线程是否有权限修改thread的属性,这个方法我们一般不自己进行调用,Thread类的set方法在进行属性原创 2021-08-01 17:36:49 · 5819 阅读 · 2 评论 -
实现多线程的几种方式
在Java中有多种方式可以实现多线程编程(记得这是一道常问的面试题,特别是在应届生找工作的时候被问的频率就更高了)。继承Thread类并重写run方法; 实现Runnable接口,并将这个类的实例当做一个target构造Thread类 实现Callable接口;继承Thread类通过继承Thread类来实现多线程编程很容易。下面代码中MyThread类继承了Thread类,并重写了run方法。但是这种方式不是很建议使用,其中最主要的一个原因就是Java是单继承模式,MyThread类继承了原创 2021-08-01 17:34:28 · 235 阅读 · 0 评论 -
上下文切换的确切含义了解下
上下文切换的含义其实在单个处理器的时期,操作系统就能处理多线程并发任务。处理器给每个线程分配 CPU 时间片(Time Slice),线程在分配获得的时间片内执行任务。CPU 时间片是 CPU 分配给每个线程执行的时间段,一般为几十毫秒。在这么短的时间内线程互相切换,我们根本感觉不到,所以看上去就好像是同时进行的一样。时间片决定了一个线程可以连续占用处理器运行的时长。当一个线程的时间片用完了,或者因自身原因被迫暂停运行了,这个时候,另外一个线程(可以是同一个线程或者其它进程的线程)就会被操作系统原创 2021-08-01 17:33:38 · 448 阅读 · 1 评论 -
并发编程中你需要知道的基础概念
多线程是Java编程中一块非常重要的内容,其中涉及到很多概念。这些概念我们平时经常挂在嘴上,但是真的要让你介绍下这些概念,你可能还真的讲不清楚。这篇博客就总结下多线程编程中经常用到的概念,理解这些概念能帮助我们更好地掌握多线程编程。进程(Process)与线程(Thread)进程和线程是最常提到的概念了。在linux中,线程与进程最大的区别就是是否共享同一块地址空间,而且共享同一块地址空间的那一组线程将显现相同的PID号。下面介绍下两者的概念:进程是操作系统进行资源分配和调度的最小单元,可以简单原创 2021-08-01 17:32:37 · 87 阅读 · 0 评论 -
Java对并发编程的支持历史
1. JDK1.4及之前在JDK1.4及之前的版本,主要提供的并发技术有:synchronized关键字 volatile关键字 不变模式(不可变类)1.1 volatile关键字#引用百度百科的解释:volatile是一个类型修饰符(type specifier),就像大家更熟悉的const一样,它是被设计用来修饰被不同线程访问和修改的变量。volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。注:百度百科的解释并不是专门针对jav原创 2021-08-01 17:31:26 · 97 阅读 · 0 评论 -
摩尔定律失效“带来”并行编程
并发和并行#在真正开始聊本文的主题之前,我们先来回顾下两个老生常谈的概念:并发和并行。并发:是指多个线程任务在同一个CPU上快速地轮换执行,由于切换的速度非常快,给人的感觉就是这些线程任务是在同时进行的,但其实并发只是一种逻辑上的同时进行; 并行:是指多个线程任务在不同CPU上同时进行,是真正意义上的同时执行。下面贴上一张图来解释下这两个概念:上图中的咖啡就可以看成是CPU,上面的只有一个咖啡机,相当于只有一个CPU。想喝咖啡的人只有等前面的人制作完咖啡才能制作自己的开发,也就是同.原创 2021-08-01 17:28:46 · 292 阅读 · 0 评论 -
Java NIO通信基础详解
高性能的Java通信,绝对离不开Java NIO技术,现在主流的技术框架或中间件服务器,都使用了Java NIO技术,譬如Tomcat、Jetty、Netty。学习和掌握NIO技术,已经不是一项加分技能,而是一项必备技能。不管是面试,还是实际开发,作为Java的“攻城狮”,都必须掌握NIO的原理和开发实践技能。3.1 Java NIO简介在1.4版本之前,Java IO类库是阻塞IO;从1.4版本开始,引进了新的异步IO库,被称为Java New IO类库,简称为JAVA NIO。New IO类库的原创 2021-03-06 00:32:31 · 502 阅读 · 0 评论 -
高并发IO的底层原理
高并发IO的底层原理本文的原则是:从基础讲起。IO的原理和模型是隐藏在编程知识底下的,是开发人员必须掌握的基础原理,是基础的基础,更是通关大公司面试的必备知识。本文从操作系统的底层原理入手,通过图文并茂的方式,为大家深入剖析高并发IO的底层原理,并介绍如何通过设置来让操作系统支持高并发。1.1 IO读写的基础原理大家知道,用户程序进行IO的读写,依赖于底层的IO读写,基本上会用到底层的read&write两大系统调用...原创 2020-08-14 01:33:40 · 495 阅读 · 0 评论 -
进程与线程的一个简单解释
进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。1.计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。2.假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一...转载 2020-03-21 02:32:14 · 81 阅读 · 0 评论 -
进程和线程的区别
关于进程和线程,大家总是说的一句话是“进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元”。这句话理论上没问题,我们来看看什么是所谓的“资源”呢。什么是计算机资源经典的冯诺依曼结构把计算机系统抽象成 CPU + 存储器 + IO,那么计算机资源无非就两种:1. 计算资源2. 存储资源CPU是计算单元,单纯从CPU的角度来说它是一个黑盒,它只对输入的指令和数据进行...转载 2020-03-21 02:30:46 · 232 阅读 · 0 评论 -
什么是多核,并行和并发的区别
在计算机设计早期,为了响应更多计算性能的需要,单处理器系统发展成为多处理器系统。更现代的、类似的系统设计趋势是将多个计算核放到单个芯片。无论多个计算核是在多个CPU芯片上还是在单个 CPU 芯片上,我们称之为多核或多处理器系统。多线程编程提供机制,以便更有效地使用这些多个计算核和改进的并发性。考虑一个应用,它有 4 个线程。对于单核系统,并发仅仅意味着线程随着时间推移交错执行(图 1),因为处理...原创 2020-03-21 02:24:57 · 2254 阅读 · 0 评论 -
Java与线程
并发不一定要依赖多线程(如PHP中很常见的多进程并发)。线程的实现 各个线程既可以共享进程资源(内存地址、文件I/O等),又可以独立调度(线程是CPU调度的基本单位)。 每个已经执行start()且还未结束的java.lang.Thread类的实例就代表了一个线程。Thread的所有关键方法都是声明为Native的。在Java API中,一个Native方法往往意味着这个方法没有...转载 2020-03-21 02:23:49 · 126 阅读 · 0 评论 -
volatile与synchronized的区别
一、多线程编程中的三个核心概念1、原子性这一点,跟数据库事务的原子性概念差不多,即一个操作(有可能包含有多个子操作)要么全部执行(生效),要么全部都不执行(都不生效)。关于原子性,一个非常经典的例子就是银行转账问题:A想要从自己的帐户中转1000块钱到B的帐户里。那个从A开始转帐,要做如下操作: 1. 从A的帐户中减去1000块钱。如果A的帐户原来有3000块钱,现在就变...原创 2019-11-26 02:35:33 · 144 阅读 · 0 评论