- 博客(11)
- 收藏
- 关注
原创 Fork/join框架
1 Frok/Join框架简介Fork/Join框架是Java7提供了的一个用于并行执行的任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 Fork 递归地将任务分解为较小的独立子任务,直到它们足够简单以便异步执行。 Join 将所有子任务的结果递归地连接成单个结果,或者在返回void的任务的情况下,程序只是等待每个子任务执行完毕。 比如计算 1+2+......+10000,可以分割成10个子任务,每个子任务对1000个数进行求和,最终汇
2021-11-07 19:48:43
3785
2
原创 Semaphore — 多线程中的信号量
1.Semaphore简介Semaphore——信号量,通过信号量可以对同一资源访问做数量的限制(控制并发的线程数)。synchronized或者ReentrantLock都是限定每次只能有一个线程并发访问共享资源;而Semaphore可以控制更多数量的线程访问资源,但是不能超过信号量的准入数。可以把它简单的理解成我们停车场入口立着的那个显示屏,每有一辆车进入停车场显示屏就会显示剩余车位减1,每有一辆车从停车场出去,显示屏上显示的剩余车辆就会加1,当显示屏上的剩余车位为0时,停车场入口的栏杆就不会
2021-10-27 14:42:36
195
原创 Exchanger — 高并发中的交换器
1.Exchanger简介Exchanger — 交换器,是JDK1.5时引入的一个同步器,从字面上就可以看出,这个类的主要作用是交换数据。如果两个线程并行处理,但在某个时刻需要互相交换自己已经处理完的中间数据,然后才能继续往下执行。这个时候就可以使用 Exchanger。Thread1线程到达栅栏后,会首先观察有没其它线程已经到达栅栏,如果没有就会等待,如果已经有其它线程(Thread2)已经到达了,就会以成对的方式交换各自携带的信息,因此Exchanger非常适合用于两个线程.
2021-10-27 14:40:44
225
原创 CyclicBarrier — 多线程中的循环栅栏
1. CyclicBarrier简介现实生活中我们经常会遇到这样的情景,在进行某个活动前需要等待人全部都齐了才开始。例如吃饭时要等全家人都上座了才动筷子,旅游时要等全部人都到齐了才出发,比赛时要等运动员都上场后才开始。在JUC包中为我们提供了一个同步工具类能够很好的模拟这类场景,它就是CyclicBarrier类。利用CyclicBarrier类可以实现一组线程相互等待,当所有线程都到达某个屏障点(栅栏)后再进行后续的操作。下图演示了这一过程:CyclicBarrier可以使一定数量的.
2021-10-27 14:38:08
2435
原创 ReentrantLock — 可重入锁
J.U.CJava.util.concurrent(java并发应用包) 是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。并发包的作者是大名鼎鼎的 Doug Lea。ReentrantLockLock在J.U.C中是最核心的组件,J.U.C 包中的所有组件绝大部分的组件都有用到了 Lock。在 Lock 接口出现之前,Java中的应用程序对于多线程的并发安全处理只能基于synchronized关键字来解决。Reentra
2021-10-27 11:43:18
1487
原创 Executor & ThreadPoolExecutor 线程池详解
在 Java 中,如果每个请求到达就创建一个新线程,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。如果在一个 Jvm 里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统资源不足。为了解决这个问题,就有了线程池的概念,线程池的核心逻辑是提前创建好若干个线程放在一个容器中。如果有任务需要处理,则将任务直接分配给线程池中的线程来执行就行,任务处理完以后这个线程不会被销毁,而是等待后续分配任务。同时通过线程池来重复管理线程还可以避免创
2021-10-27 11:32:38
4306
原创 多线程之可见性&&有序性
这里写自定义目录标题可见性&&有序性一、可见性1、什么是可见性2、解决可见性问题二、有序性1、指令重排序2、双重检查锁(double checked locking)可见性&&有序性一、可见性1、什么是可见性CPU会从缓存中取值:a.java内存模型规定所有的变量都是存在主存中,每个线程都有自己的工作内存。线程对变量的所有操作都必须在工作内存中进行,而不能直接对主存进行操作。不同线程之间无法直接访问对方工作内存中的变量。线程间变量的值传递均需要通过主内存来完成。
2021-10-11 18:53:06
1895
原创 线程的创建 — Thread与Runnable详解
一、实现多线程的两种基本方式1、继承Thread方式 & 实现Runnable方式//1、继承Thread方式public class MyThread extends Thread{ ... @Override public void run(){ ... }}MyThread mt = new MyThread();//创建线程mt.start();//启动线程,调用的是父类Thread类的start()方法 //2、实...
2021-09-15 10:26:43
483
原创 java8_并行与并发
并行与并发并发:多个任务可以在重叠的时间段内运行。并行:多个任务可以同时运行。1.基本概念1.1 程序/进程/线程程序:静态单元进程:是执行程序的一次过程(动态),持有资源(共享内存,共享文件和线程),系统资源分配的单位 —— idea eclipse QQ线程: CPU调度和执行的单位 线程是系统中最小的执行单元/同一进程中有多个线程/线程共享进程的资源 —— idea 源代码文本编辑、源代码编译、文本校验 很多线程是模拟出来的(类似同时在做),真正的多线程是指有多个CPU,即
2020-11-16 15:57:31
1310
原创 java8 Lambda表达式+Function包
typora-root-url: ./Lambda表达式 函数式编程是一种相对于命令式编程的编程范式,命令式编程关注的是怎么做,函数式编程关注的是做什么,不需要关注实现的细节。1、lamda表达式简介什么是lambda? 我们知道,对于一个Java变量,我们可以赋给其一个“值”,如果你想把“一块代码”赋给一个Java变量,应该怎么做呢?比如,把右边那块代码赋给一个叫做aBlockOfCode的Java变量: 在Java 8之前,这个是做不到的。但是Java 8问世之后,利用.
2020-11-13 15:47:42
4863
原创 Spring boot预备知识——maven学习笔记(项目管理工具)
Maven一.Maven介绍1.Maven是什么?1)Maven是基于java平台(意味着我们要配置jdk)的自动化构建工具。基于项目对象模型(缩写:POM)概念,Maven就能管理一个项目的构建、报告和文档等步骤。构建: 以“Java源文件”,“框架配置文件”,“HTML”,“图片”等为原料,去"生产"一个可以运行的项目的过程。例:Java源文件—>编译—>....
2020-03-01 16:20:32
425
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人