随笔分类 -  互联网-并发编程

摘要:什么是线程 我们知道,一个进程指的是一个正在执行的应用程序。线程对应的英文名称为“thread”,它的功能是执行应用程序中的某个具体任务,比如一段程序、一个函数等。线程和进程之间的关系,类似于工厂和工人之间的关系,进程好比是工厂,线程就如同工厂中的工人。一个工厂可以容纳多个工人,工厂负责为所有工人提 阅读全文
posted @ 2022-12-01 15:46 hanease 阅读(45) 评论(0) 推荐(0) 编辑
摘要:为什么需要线程池?线程池能够对线程进行统一分配,调优和监控:- 降低资源消耗(线程无限制地创建,然后使用完毕后销毁)- 提高响应速度(无须创建线程)- 提高线程的可管理性 Java是如何实现和管理线程池的?从JDK 5开始,把工作单元与执行机制分离开来,工作单元包括Runnable和Callable 阅读全文
posted @ 2022-02-16 10:22 hanease 阅读(121) 评论(0) 推荐(0) 编辑
摘要:一、总括 java底层并发包,笔者将该包大致分成3个层次。 1、基础依赖: 共享变量volatile:有利于线程可见性。Unsafe类:CAS(Compare and Swap)比较并交换,用于并发下交换数据;Thread相关挂起(park)及取消挂起的功能。2、基础类(基础类的实现基本是基于基础依 阅读全文
posted @ 2022-02-14 16:52 hanease 阅读(325) 评论(0) 推荐(0) 编辑
摘要:一、多线程 1、操作系统有两个容易混淆的概念,进程和线程。 进程:一个计算机程序的运行实例,包含了需要执行的指令;有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;进程拥有各种资源和状态信息,包括打开的文件、子进程和信号处理。 线程:表示程序的执行流程,是CPU调度执行的基本 阅读全文
posted @ 2022-02-14 16:30 hanease 阅读(1623) 评论(0) 推荐(0) 编辑
摘要:com.java.util.concurrent包是java5时添加的,专门处理多线程提供的工具类 一、Atomic 二、Lock 三、BlockingQueue 四、BlockDeque 五、ConcurrnetMap 六、CountDownLatch 七、CyclicBarrier 八、Exec 阅读全文
posted @ 2022-02-14 16:28 hanease 阅读(898) 评论(0) 推荐(0) 编辑
摘要:并发容器的由来 在Java并发编程中,经常听到Java集合类,同步容器、并发容器,那么他们有哪些具体分类,以及各自之间的区别和优劣呢? 只有把这些梳理清楚了,你才能真正掌握在高并发的环境下,正确使用好并发容器,我们先从Java集合类,同步容器谈起。 1.什么是同步容器 Java的集合容器框架中,主要 阅读全文
posted @ 2022-02-07 22:50 hanease 阅读(224) 评论(0) 推荐(0) 编辑
摘要:为什么需要线程池 我们有两种常见的创建线程的方法,一种是继承Thread类,一种是实现Runnable的接口,Thread类其实也是实现了Runnable接口。但是我们创建这两种线程在运行结束后都会被虚拟机销毁,如果线程数量多的话,频繁的创建和销毁线程会大大浪费时间和效率,更重要的是浪费内存。那么有 阅读全文
posted @ 2022-02-07 22:48 hanease 阅读(1077) 评论(0) 推荐(0) 编辑
摘要:一、死锁的定义 多进程,多线程的并发执行虽然提升了系统资源的利用率,提高了系统的性能,但是并发执行也带来了新的问题 死锁。 死锁是指多个进程(线程)在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象(互相挂起等待),若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了 阅读全文
posted @ 2022-02-05 22:06 hanease 阅读(1331) 评论(0) 推荐(0) 编辑
摘要:一、线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点,Java中的多线程也就基本上掌握了。主要包括: Java线程具有七种基本状态 新建状态(New):至今尚未启动的线程的状态。线程刚 阅读全文
posted @ 2022-02-05 21:50 hanease 阅读(748) 评论(0) 推荐(0) 编辑
摘要:文章目录: 一、volatile的作用1.1、volatile变量的可见性1.2、volatile变量的禁止指令重排序二、volatile的的底层实现2.1、 Java代码层面2.2、字节码层面2.3、JVM源码层面2.4、汇编层面2.5、硬件层面 volatile关键字是Java虚拟机提供的最轻量 阅读全文
posted @ 2022-02-05 21:44 hanease 阅读(601) 评论(0) 推荐(0) 编辑
摘要:Java内存模型(JMM) 我们常说的JVM内存模式指的是JVM的内存分区;而Java内存模式是一种虚拟机规范。 Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效 阅读全文
posted @ 2022-02-05 21:36 hanease 阅读(70) 评论(0) 推荐(0) 编辑
摘要:一、线程池 1.1、什么是线程池 线程池是一种多线程的处理方式,利用已有线程对象继续服务新的任务(按照一定的执行策略),而不是频繁地创建销毁线程对象,由此提高服务的吞吐能力,减少CPU的闲置时间。具体组成部分包括:(1)、线程池管理器(ThreadPool)用于创建和管理线程池,包括创建线程池、销毁 阅读全文
posted @ 2022-02-05 21:27 hanease 阅读(72) 评论(0) 推荐(0) 编辑
摘要:1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中。 wait()方法:对此对象调用wait方法导致 阅读全文
posted @ 2021-12-22 21:51 hanease 阅读(62) 评论(0) 推荐(0) 编辑
摘要:java基础知识回顾之java Thread类学习(十)--线程的状态以及转化使用的方法介绍 线程的概述: 线程是程序的多个执行路径,执行调度的单位,依托于进程存在。线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间叫做线程栈,是建立线程的时候由系统分配的,主要用来保存线程内 阅读全文
posted @ 2021-12-22 21:51 hanease 阅读(47) 评论(0) 推荐(0) 编辑
摘要:上一节售票系统中我们发现,打印出了错票,0,-1,出现了多线程安全问题。我们分析为什么会发生多线程安全问题? 看下面线程的主要代码: @Override public void run() { // TODO Auto-generated method stub while(true){ if(ti 阅读全文
posted @ 2021-12-22 21:47 hanease 阅读(49) 评论(0) 推荐(0) 编辑
摘要:java基础知识回顾之java Thread类--java线程实现常见的两种方式(一) 创建线程的第一种方式: / * 步骤: * 1.继承Thread类 * 2. 重写Thread的run方法 * 目的:将自定义的代码存储在run方法中,运行自定义线程 * start 1.启动线程,2调用run方 阅读全文
posted @ 2021-12-22 21:44 hanease 阅读(54) 评论(0) 推荐(0) 编辑
摘要:前言ThreadPoolExecutor在concurrent包下,是我们最常用的类之一。无论是做大数据的,还是写业务开发,对其透彻的理解以及如何发挥更好的性能,成为了我们在更好的coding道路上必不可少的基础。 为什么用线程池?如果并发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创 阅读全文
posted @ 2021-12-22 21:36 hanease 阅读(865) 评论(0) 推荐(0) 编辑
摘要:本文是将 Fork-Join 复杂且较为庞大的框架分成5个小点来分析 Fork-Join 框架的实现原理,一个个点地理解透 Fork-Join 的核心原理。 1. Frok-Join 框架的核心类的结构分析 Fork-Join 框架有三个核心类:ForkJoinPool,ForkJoinWorker 阅读全文
posted @ 2021-06-19 21:32 hanease 阅读(145) 评论(0) 推荐(0) 编辑
摘要:一、Fork-Join 框架介绍 1. 什么是 Fork-Join 分治编程框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架,这种开发方法也叫 分治编程。分治编程可以极大地利用CPU资源,提高任 阅读全文
posted @ 2021-06-19 21:30 hanease 阅读(81) 评论(0) 推荐(0) 编辑
摘要:1、相关概念解释 1.1 “内部”和外部 当一个操作是在非ForkjoinThread的线程中进行的,则称该操作为外部操作。比如我们前面执行pool.invoke,invoke内又执行externalPush。由于invoke是在非ForkjoinThread线程中进行的(这里是在main线程中进行 阅读全文
posted @ 2021-06-18 23:16 hanease 阅读(512) 评论(0) 推荐(0) 编辑