自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 Fork/join框架

1 Frok/Join框架简介Fork/Join框架是Java7提供了的一个用于并行执行的任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 Fork 递归地将任务分解为较小的独立子任务,直到它们足够简单以便异步执行。 Join 将所有子任务的结果递归地连接成单个结果,或者在返回void的任务的情况下,程序只是等待每个子任务执行完毕。 比如计算 1+2+......+10000,可以分割成10个子任务,每个子任务对1000个数进行求和,最终汇

2021-11-07 19:48:43 3718 2

原创 Semaphore — 多线程中的信号量

1.Semaphore简介Semaphore——信号量,通过信号量可以对同一资源访问做数量的限制(控制并发的线程数)。synchronized或者ReentrantLock都是限定每次只能有一个线程并发访问共享资源;而Semaphore可以控制更多数量的线程访问资源,但是不能超过信号量的准入数。可以把它简单的理解成我们停车场入口立着的那个显示屏,每有一辆车进入停车场显示屏就会显示剩余车位减1,每有一辆车从停车场出去,显示屏上显示的剩余车辆就会加1,当显示屏上的剩余车位为0时,停车场入口的栏杆就不会

2021-10-27 14:42:36 180

原创 Exchanger — 高并发中的交换器

1.Exchanger简介Exchanger — 交换器,是JDK1.5时引入的一个同步器,从字面上就可以看出,这个类的主要作用是交换数据。如果两个线程并行处理,但在某个时刻需要互相交换自己已经处理完的中间数据,然后才能继续往下执行。这个时候就可以使用 Exchanger。Thread1线程到达栅栏后,会首先观察有没其它线程已经到达栅栏,如果没有就会等待,如果已经有其它线程(Thread2)已经到达了,就会以成对的方式交换各自携带的信息,因此Exchanger非常适合用于两个线程.

2021-10-27 14:40:44 203

原创 CyclicBarrier — 多线程中的循环栅栏

1. CyclicBarrier简介现实生活中我们经常会遇到这样的情景,在进行某个活动前需要等待人全部都齐了才开始。例如吃饭时要等全家人都上座了才动筷子,旅游时要等全部人都到齐了才出发,比赛时要等运动员都上场后才开始。在JUC包中为我们提供了一个同步工具类能够很好的模拟这类场景,它就是CyclicBarrier类。利用CyclicBarrier类可以实现一组线程相互等待,当所有线程都到达某个屏障点(栅栏)后再进行后续的操作。下图演示了这一过程:CyclicBarrier可以使一定数量的.

2021-10-27 14:38:08 2381

原创 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 1422

原创 Executor & ThreadPoolExecutor 线程池详解

在 Java 中,如果每个请求到达就创建一个新线程,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。如果在一个 Jvm 里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统资源不足。为了解决这个问题,就有了线程池的概念,线程池的核心逻辑是提前创建好若干个线程放在一个容器中。如果有任务需要处理,则将任务直接分配给线程池中的线程来执行就行,任务处理完以后这个线程不会被销毁,而是等待后续分配任务。同时通过线程池来重复管理线程还可以避免创

2021-10-27 11:32:38 4226

原创 多线程之可见性&&有序性

这里写自定义目录标题可见性&&有序性一、可见性1、什么是可见性2、解决可见性问题二、有序性1、指令重排序2、双重检查锁(double checked locking)可见性&&有序性一、可见性1、什么是可见性CPU会从缓存中取值:a.java内存模型规定所有的变量都是存在主存中,每个线程都有自己的工作内存。线程对变量的所有操作都必须在工作内存中进行,而不能直接对主存进行操作。不同线程之间无法直接访问对方工作内存中的变量。线程间变量的值传递均需要通过主内存来完成。

2021-10-11 18:53:06 1838

原创 线程的创建 — 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 449

原创 java8_并行与并发

并行与并发并发:多个任务可以在重叠的时间段内运行。并行:多个任务可以同时运行。1.基本概念1.1 程序/进程/线程程序:静态单元进程:是执行程序的一次过程(动态),持有资源(共享内存,共享文件和线程),系统资源分配的单位 —— idea eclipse QQ线程: CPU调度和执行的单位 线程是系统中最小的执行单元/同一进程中有多个线程/线程共享进程的资源 —— idea 源代码文本编辑、源代码编译、文本校验​ 很多线程是模拟出来的(类似同时在做),真正的多线程是指有多个CPU,即

2020-11-16 15:57:31 1275

原创 java8 Lambda表达式+Function包

typora-root-url: ./​Lambda表达式​ 函数式编程是一种相对于命令式编程的编程范式,命令式编程关注的是怎么做,函数式编程关注的是做什么,不需要关注实现的细节。1、lamda表达式简介什么是lambda?​ 我们知道,对于一个Java变量,我们可以赋给其一个“值”,如果你想把“一块代码”赋给一个Java变量,应该怎么做呢?比如,把右边那块代码赋给一个叫做aBlockOfCode的Java变量:​ 在Java 8之前,这个是做不到的。但是Java 8问世之后,利用.

2020-11-13 15:47:42 4728

原创 Spring boot预备知识——maven学习笔记(项目管理工具)

Maven一.Maven介绍1.Maven是什么?1)Maven是基于java平台(意味着我们要配置jdk)的自动化构建工具。基于项目对象模型(缩写:POM)概念,Maven就能管理一个项目的构建、报告和文档等步骤。构建: 以“Java源文件”,“框架配置文件”,“HTML”,“图片”等为原料,去"生产"一个可以运行的项目的过程。例:Java源文件—>编译—>....

2020-03-01 16:20:32 390

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除