自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 论坛 (12)
  • 收藏
  • 关注

原创 JUC之ForJoin

ForkJoin在JDK 1.7 ,并行执行任务!提高效率。大数据量!大数据:Map Reduce(把大任务拆分为小任务)ForJoin特点:工作窃取 。工作窃取:维护了一个双端队列。A,B线程同时进行工作,B线程执行任务完毕后,会去执行A的任务。使用方法:1、写一个类继承RecursiveTask2、在compute里面写入要递归的调用的方法package forjoin; import java.util.concurrent.RecursiveTask;public class

2020-12-31 20:14:47 29 1

原创 JUC自定义自己的线程池

先来看这个Executors来创建线程池:import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ExecutorsDemo { public static void main(String[] args) {// ExecutorService service = Executors.newSingleThreadExecutor();//单

2020-12-29 17:11:03 7

原创 JUC同步队列SynchronousQueue

同步队列SynchronousQueue:没有容量,进去一个元素,必须等待取出来之后,才能再往里面放一个元素!具体方法:put,takeapi中的描述:代码实现:import java.util.concurrent.BlockingQueue;import java.util.concurrent.SynchronousQueue;import java.util.concurrent.TimeUnit;public class SynchronousQueueDemo { pub

2020-12-29 15:18:35 17 2

原创 JUC阻塞队列BlockingQueue

学习完队列后,以后集合的示意图就要变成:什么情况下我们会使用阻塞队列:多线程并发处理,线程池!下面来使用一下阻塞队列BlockingQueue:抛出异常的api:add和removeimport java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;public class BlockingQueueDemo { public static void main(String

2020-12-28 22:02:20 12

原创 JUC之读写锁:ReadWriteLock

为什么会存在读写锁呢?1、因为synchronized粒度太大了,并不适合我们,可重入锁的粒度相较于读锁(共享锁)也较大,我们需要粒度小的锁。2、大部分场景下,读不需要加锁,而写需要加锁,因为写入不加锁有可能出现写入覆盖和信息不一致的情况,并且大部分的读需求粒度更小的锁,这样会占用更少的资源。独占锁(写锁)—次只能被一个线程占有共享锁(读锁)多个线程可以同时占有这里先不加锁import java.util.HashMap;import java.util.Map;public class

2020-12-28 14:34:00 20

原创 JUC辅助类Semaphore(信号量)

·api解释限流作用的一个工具类,规定了多少数量,同一时间就只能走多少数量,直到有释放出来。代码如下:import java.util.concurrent.Semaphore;import java.util.concurrent.TimeUnit;public class SemaphoreDemo { public static void main(String[] args) { //模拟一个抢车位场景 Semaphore semaphore = n

2020-12-28 14:04:06 19

原创 JUC辅助类CyclicBarrier(栅栏)

api解释:类似CountDownLatch,但是是一个加法计数器。从0开始计数具体方法:cyclicBarrier.await();等待到CyclicBarrier内规定数量,才会执行await内的语句。具体代码如下:import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;public class CyclicBarrierDemo { public sta

2020-12-28 13:20:32 51

原创 JUC辅助类CountDownLatch

api里的解释:就是一个计数器,辅助全部线程按顺序执行。  允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。  A CountDownLatch用给定的计数初始化。 await方法阻塞,直到由于countDown()方法的调用而导致当前计数达到零,之后所有等待线程被释放,并且任何后续的await 调用立即返回。 这是一个一次性的现象 - 计数无法重置。 如果您需要重置计数的版本,请考虑使用CyclicBarrier 。使用代码:import java.util.concurren

2020-12-26 21:42:51 18

原创 callable和runable的比较

废话不多说,直接看一下api里面对callable的解释:  Callable接口类似于Runnable ,因为它们都是为其实例可能由另一个线程执行的类设计的。 然而,A Runnable不返回结果,也不能抛出被检查的异常。  所以比起runable来说,callable有以下特点:1、有返回值2、可以抛出异常3、方法不同,run(),call()要使用callable还不能直接像runable一样,而是要借助futureTask代码如下:import java.util.concurren

2020-12-26 21:23:06 14

原创 MAP安全类:ConcurrentHashMap解析

下面先来说说map类下的 HashMap:HashMap的构造方法,可以写初始化容量和加载因子,默认是16和0.75,这里可以从源码查看: static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 static final int MAXIMUM_CAPACITY = 1 << 30; static final float DEFAULT_LOAD_FACTOR = 0.75f;但,Has

2020-12-26 20:10:49 24

原创 集合安全类CopyOnWriteArraySet源码解析

CopyOnWriteArraySet的构造方法源码上是这样写的,所以直接参考COW即可: public CopyOnWriteArraySet() { al = new CopyOnWriteArrayList<E>();}这是CopyOnWriteArraySet源码

2020-12-26 14:22:25 20

原创 集合安全类CopyOnWriteArrayList源码解析

用不是同步的集合在多线程的情况下会出现ConcurrentModificationException错误,原因是扩容过程中被遍历       而解决这个问题的方法有两种,一个是使用vector,另一个是juc里的COW(copyonwritearraylist)        先来谈谈vector,这个东西其实就是Arraylist的所有声明方法上都加上s

2020-12-26 14:13:32 11

原创 ConcurrentModificationException怎么发生的

看代码,我这里是用的不安全集合 ArrayList,然后我再遍历添加元素,在遍历中输出集合。package collection;import java.util.ArrayList;import java.util.UUID;public class SafeCollection { public static void main(String[] args) { ArrayList<Object> list = new ArrayList<>(

2020-12-26 13:49:19 13

原创 8锁问题,探究锁到底锁了谁,谁被锁了

8锁就是8个锁的问题,直接探究出到底锁的是谁:下面看题和结果就可以了。题的情况很简单,就是一个Phone类,里面有打电话和发短信俩方法,答案就是先发短信还是先打电话即可:问题1:正常情况下,谁会先输出出来package lock8;import java.util.concurrent.TimeUnit;//1、正常情况下,谁会先输出出来public class Test1 { public static void main(String[] args) { Phone

2020-12-25 20:20:34 39

原创 使用同步监视器condition进行顺序输出

这里需要明白的是,同一把锁可以new出很多个同步监视器,我们这里的顺序执行是通过多个的同步监视器做到的,A执行=》唤醒B=》B执行=》唤醒C=>C执行=>唤醒A=》执行Aimport java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class C { public

2020-12-25 16:02:06 13

原创 JUC生产者消费者问题

juc版本和synchronized版本的区别:juc这里使用锁需要事先在类里面声明锁,然后用锁获取newCondition,使用condition类即可,以下是jdk,api里面写的例如,假设我们有一个有限的缓冲区,它支持put和take方法。 如果在一个空的缓冲区尝试一个take ,则线程将阻塞直到一个项目可用; 如果put试图在一个完整的缓冲区,那么线程将阻塞,直到空间变得可用。 我们希望在单独的等待集中等待put线程和take线程,以便我们可以在缓冲区中的项目或空间可用的时候使用仅通知单个线程

2020-12-25 15:30:51 17

原创 synchronized 的虚假唤醒问题

虚假唤醒:线程也可以唤醒,而不会被通知,中断或超时,即所谓的虚假唤醒 。 虽然这在实践中很少会发生,但应用程序必须通过测试应该使线程被唤醒的条件来防范,并且如果条件不满足则继续等待。(当线程只有一个消费者和一个生产者的时候不会发生,多个生产者和多个消费者同时进行if判断时才会发生)举个简单例子,我们正常的生产者和消费者问题应该是://线程之间的通信问题:生产者和消费者问题!等待唤醒,通知唤醒线程交替执行A B操作同一个变量num = 0// A num+1// B

2020-12-25 14:44:59 17

原创 公平锁和非公平锁的区别以及什么是CAS

什么是CAS?CAS是compare and swap的缩写,即我们所说的比较交换。cas是一种基于锁的操作,而且是乐观锁。什么是公平锁?通过源码观察,我们发现,公平锁会先去获取当前锁的状态,如果当前锁没有被占用,则获取当前的前驱节点(!hasQueuedPredecessors,看有没有存在阻塞队列),再去进行一次CAS修改同步状态变量,成功返回true。否则加入阻塞队列,即排队等待。 static final class FairSync extends Sync { priv

2020-12-25 10:52:06 58

原创 juc之锁2:Lock锁的可重入锁ReentrantLock

Lock所在的包是在JUC下的lock包下:实现类有可重入锁,读写锁在jdk文档下查看一下使用方法:以下是我使用的例子:import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class Test2 { public static void main(String[] args) { Ticket ticket =new Ticket

2020-12-23 21:37:38 11

原创 juc之锁1:使用传统的Synchronized

没有使用Synchronized前:import java.sql.Time;import java.util.concurrent.TimeUnit;public class Test1 { public static void main(String[] args) { Ticket ticket =new Ticket(); new Thread(()->{ for (int i=1;i<60;i++) ti

2020-12-23 21:10:03 18

原创 操作系统和java的线程状态

今天在看juc,发现java的源码线程状态和操作系统的不同,java的Thread.State源码中, 是有六种状态的,下面来说说操作系统和java的线程的不同。操作系统中线程的状态有:初始状态(NEW)可运行状态(READY)运行状态(RUNNING)等待状态(WAITING)终止状态 (TERMINATED)java的线程状态有:这里是从java的Thread.State源码里面翻的public enum State { //新生 NEW, //运行 RU

2020-12-23 19:24:42 32

原创 设置主键自增从任意数字开始,不删除数据的情况下

我做一个vue+spring cloud的前后端分离项目里,出现了很尴尬的事情,就是我的后端Mybatis-plus用的是默认的雪花算法,然后前端取不到精确数据,导致我做修改或者是删除功能的无法到具体的数据删除。然后把mp的主键自增策略改成auto,发现数据库居然自增的是雪花算法的id。。。这下尴尬了,百般尝试下总算可以在不删除数据的情况下,设置主键自增从哪里开始ALTER TABLE USER AUTO_INCREMENT 8; 里面的USER是表名8是你要设置成的自增数字...

2020-12-19 17:24:35 14 1

原创 vue使用element ui的tree树形控件模板

需要什么属性就去官方文档查询,然后在对应位置填上,我这个模板经供参考控件属性<!-- --><template> <el-tree :data="menu" :props="defaultProps" :expand-on-click-node="false" show-checkbox node-key="catId"> <span class="custom-tree-node" slot-scope="{ node, data }"&

2020-12-18 13:41:24 39

原创 跨域问题:CORS plicy: Response to preflight request doesn‘t pass access control No ‘Access-Control-AllC

出现这个错误说明你的网页访问存在跨域问题,可以看我这个文章跨域问题解决

2020-12-17 20:32:15 24

原创 跨域问题:has been blocked by CORS policy: The ‘Access-Control-Allow-Origin‘ header contains

has been blocked by CORS policy: The ‘Access-Control-Allow-Origin’ header contains multiple values ‘http://localhost:8001, http://localhost:8001’, but only one is allowed.这是说明你的跨域请求有多个但是只允许一个,这时候你检查一下自己的网关和项目的跨域配置即可...

2020-12-17 20:24:45 89

原创 使用gateway网关解决浏览器跨域问题,源码解析

跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。我们这里利用CORS策略,对我们的网关进行修改,让他接收到跨域请求的时候忽略掉OPTION中的报头不同。这里我们创建个config包,来装跨域配置spirngbot配置中在CorsWebFilter设置了跨域问题,我们只需要写一个方法覆盖他即可,翻看源码我们可以发现他需要两个类,一个是CorsConfigurationSource还有一个是CorsProcessor,而CorsConf

2020-12-17 20:15:10 103

原创 jdk8的Stream流快速使用

不多bb就告诉大家这个东西干嘛用的,然后就开始用:Stream API对集合数据进行操作,就类似于使用SQL执行的数据年近询。也可以使用Stream API来并行执行操作。简言之,Stream API提供了一种高效且易于使用的处理数据的方式。这是过程:以下是常用方法(图是扣的,侵删:import java.util.Arrays;import java.util.Comparator;import java.util.List;import java.util.stream.Collecto

2020-12-16 14:28:47 32

原创 使用element UI模板快速创造一个可视化界面

首先导入elementUI里面的组件模板:1、在src下的App.vue下使用模板<template><el-container style="height: 500px; border: 1px solid #eee"> <el-aside width="200px" style="background-color: rgb(238, 241, 246)"> <el-menu :default-openeds="['1', '3']">

2020-12-15 14:37:39 188

原创 VSCode 代码整理快捷键

VSCode 代码格式化 快捷键Visual Studio Code可以通过以下快捷键 格式化代码:On Windows   Shift + Alt + FOn Mac   Shift + Option + FOn Ubuntu   Ctrl + Shift + I

2020-12-15 14:03:46 51

转载 踩坑:The template root requires exactly one element.

这是因为vue的模版中只有能一个根节点,所以在中插入第二个元素就会报错解决方案:将中的元素用一个大的包起来,这样就可以在其中添加多个元素了,可以参考以下示例:<template> <div id="vue"> Hello Vue.js!{{message}} <span>{{message1}}</span> <span v-if="seen">你看到我啦!</span> <div i

2020-12-15 13:15:17 37

原创 npm出现ENOTFOUND解决办法

npm有时候总出现这个,很烦躁,这时候推荐直接npm config set registry http://registry.cnpmjs.org/下载成功了,但是用的不是淘宝镜像了

2020-12-15 12:53:48 649

原创 详解v-for各个参数

开始很懵逼为什么v-for会有三个元素,明明两个就够用了,然后我尝试了一下,用数组存对象然后使用三个元素,index总取不出来。代码如下: <div id="app"> <ul> <li v-for="(v,k,index) in users"> {{v}}====={{k}}====={{index}} </li> </ul>

2020-12-14 14:25:33 447

原创 springboot2.4降级到boot2.2.x

最近在做一个springcloud的整合项目,但是springcloud-alibaba的nacos只支持2.2.x版本,而项目开始也没注意,直接用的2.4版本,所以这里记录下降级踩下的坑。这里直接把boot版本号改成2.2.6然后去启动主启动类会出现 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter

2020-12-10 13:53:00 625 3

空空如也

关于hashmap扩容问题

发表于 2021-01-04 最后回复 2021-01-04

docker可以ping通网络,但是无法访问服务

发表于 2020-11-22 最后回复 2020-11-22

docker部署阿里云短信服务出现问题Server response has a bad format type: null

发表于 2020-11-13 最后回复 2020-11-13

重写ribbon轮询底层方法的疑惑

发表于 2020-10-09 最后回复 2020-10-09

关于集中式LB和进程内LB区别

发表于 2020-10-09 最后回复 2020-10-09

druid线程池会自动设置线程为提交吗?

发表于 2020-08-25 最后回复 2020-08-25

关于德鲁伊连接池链接获取问题

发表于 2020-08-14 最后回复 2020-08-14

为什么单个字节和字节数组还有缓冲区的读写没有区别。。。

发表于 2020-07-26 最后回复 2020-08-09

问个html的LocalStorage储存问题

发表于 2019-04-24 最后回复 2020-08-09

请问下新特性是可以直接定义接口调用方法了吗。。。

发表于 2020-08-09 最后回复 2020-08-09

一个判断语句看不是很懂,求用if重写下这个

发表于 2020-07-22 最后回复 2020-07-26

关于继承的一些疑问

发表于 2020-07-15 最后回复 2020-07-17

空空如也

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

TA关注的人 TA的粉丝

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