自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 问答 (6)
  • 收藏
  • 关注

原创 JUC学习----线程池,异步方法回调

BlockingQueue workQueue,阻塞队列,如果任务有很多,就会将目前多的任务放入队列,只要有线程空闲,就会在队列里取新的任务放进去,继续执行。如果当前线程数量大于核心数量,会释放空闲的线程,只要空闲的线程超时,释放。核心线程7个处理,然后50个任务进入阻塞队列,然后剩下的13个再次处理,这下就已经处理了70个任务,30个使用拒绝策略。说一个问题,现在核心线程为7,最大线程为20,阻塞队列为50,现在有100个任务进来。3.线程池根据需求创建线程,可扩容,遇强则强。

2023-06-06 21:34:33 209

原创 JUC学习---ReentrantReadWriteLock

乐观锁会在资源上加一个版本号,每次进行修改,会将版本号进行对比,如果相等,则进行修改,实际上,并不会对资源进行加锁底层时CAS,使用了一个自旋的方式去进行对比,交换。但行锁可以造成死锁,比如第一个线程将第一行锁住,想要获取第二行,但第二个线程将第二行锁住,想要获取第一行,资源一直得不到释放,即发生死锁。但当引入读写锁时,问题就不一样了,即在现实中,读操作远远大于写操作,所以引入了读锁是共享的,而写锁是独占的。就比如抄作业,可以当一个人边写,你边抄,当他写完了,你也抄完了。在锁中有乐观锁和悲观锁。

2023-06-06 17:54:18 46

原创 JUC强大的辅助类学习

CyclicBarrier的构造器为如下所示,构造器中要实现Runnable接口,直接用Lambda表达式,当没有达到7时,则不执行Lambda中的语句,达到后再执行。用一个停车的例子来说,当只有3个停车位,但有6辆车要入库,则当1辆车进入,就占有一个,3个车进入后,则后面二点车不能进入必须等待有一辆车离开后才能进入。设置一个信号量,当信号量为0时,则处于等待状态,一个线程结束,则释放信号量,另一个线程则可以运行。对于这个,当我们离开学校时,等每一个班的孩子走完了才能锁门。3.Semaphore信号灯。

2023-06-06 16:29:32 55

原创 JUC学习6(Callable)

创建线程的四种方式1.实现Thread类2.继承Runnable接口3.继承Callable接口4.线程池对于Runnable和Callable接口Runnable接口不能得到方法的返回值,但Callable接口可以得到返回值,并可以得到方法的异常我们来实现一下这两个接口对于Runnable接口,可以直接实现但Runnable接口是一个函数式接口,可以用匿名实现类但对于Callable接口来说就不行了这时就要用到设计模式中的适配器模式,有这么一个类FutureTask它实现了Runnable接口

2023-06-06 11:34:41 49

原创 JUC学习5(锁)

但这个可能也不是死锁,比如死循环,或者睡眠也有一样的结果,即我们只有两个工具jps和jstack(必须配置环境变量)非公平锁会提升效率,但可能会使线程一直拿不到锁饿死(线程长时间得不到资源从而一直得不到执行)3.对于同步方法块,锁的时Synchronized括号里配置的对象。1.对于普通的同步方法,锁的是当前的实例对象就是this。公平锁:多个线程按照申请锁的顺序进入队列,从而的到锁。2.对于静态同步方法,锁的是当前的Class对象。而它报错的内容为堆栈溢出,但说明了它是可重入锁。

2023-06-05 22:09:49 28

原创 JUC学习(4)集合安全的学习,以及解决

当多个线程对list集合进行一个add和查看时就会发生java.util.ConcurrentModificationException。这个的原理为,当读的读写异步,在读的时候将旧的数据复制一份,用旧的数据进行读,用心的数据进行写。CopyOnWriteArraySet()的原理本质上和CopyOnWriteArrayList()一样。Collections.synchronizedList()的解决方案。hashMap的线程不安全问题的解决。2.hashSet的解决方案。3.hashMap的解决方案。

2023-06-05 19:38:10 29

原创 JUC学习(3)线程之间的通信,且定制化通信

就像是,两个进行减减操作的线程,当a线程进行--时,判断没成功,被b线程抢到,而b线程进行--也没成功,阻塞,这时被a线程进行抢到,但wait方法会从当前阻塞处继续执行,从而,a线程执行--操作,使0变为-1。---->进行线程之间的等待,或者唤醒。为什么会出现-1,这就是线程的虚假唤醒问题,因为,当先线程进入wait方法时,进行了一个阻塞,而当唤醒时,不经过if的判断。---->对线程的加锁解锁。aa线程打印一句话------>bb线程打印一句话2次-------->cc线程打印一句话3次。

2023-06-05 18:45:06 43

原创 JUC学习(2)Lock接口

lock需要自己去手动上锁和解锁,当没有解锁时,可能会导致死锁(要在finally关键字中进行解锁),synchronized不需要用户手动释放锁。lock是个类,不是java语言内置的,synchronized是java的关键字。1.创建资源类,定义其相应的属性和方法 Ticket。2.创建多个线程,调用资源类的操作方法。2.使用lock接口同样去实现一个上锁和解锁的过程。创建3个线程循环的去调用这个卖票的方法,直到卖完为止。在Ticket类中创建相应的方法。再进行一个相应的调用。

2023-06-05 12:53:32 30

原创 JUC学习(1)--->概述

2.sleep不会释放锁,也不需要占用锁,wait会释放锁,但调用它的前提是当前线程必须占有锁,即在synchronized中。就是在执行时,持有管程对象,在结束时,释放管程对象,而jvm同步基于进入和退出,使用管程对象实现的,进入要加锁,退出要解锁。是一种同步机制,保证同一个时间,只有一个线程访问保护数据,或者代码,而当主线程结束后,守护线程也会自动结束,即jvm结束。当主线程结束后,用户线程还没有结束,即jvm存活。2.主线程结束后,守护线程也会自动结束,即jvm结束。6.TERMINATED 终结。

2023-06-04 21:25:22 31

原创 String的常用用法

/从指定位置从后往前开始找字符串在指定子串中第一次出现的位置,没有则返回-1。//,从后往前找返回字符串在指定子串中的第一次位置,如果没找到,则返回-1。//从指定位置开始找字符串在指定子串中第一次出现的位置,没有则返回-1。//返回字符串在指定子串中的第一次位置,如果没找到,则返回-1。

2023-06-04 12:29:03 37

原创 SpringBoot的常用注解(2)

而@Qualifier也只有一个参数,当@Autowired的注入不成功时,value值就可以配合着Autowired使用,如果value和要注入的bean的类型比对没成功,则和bean的名字进行比对,因为Autowired的默认时按照类型进行装配。从源码来看,可以在resource上直接按照类型或者名字进行装配,默认是按照名称进行装配的,如果name属性指定了,但没有找到则报错,如果没有指定,则按照类型名进行匹配,匹配不到,则按照给出的字段名,进行匹配,匹配不到,则报错。如代码所示,有两个不同的Dao。

2023-06-03 22:48:19 38

原创 SpringBoot的常用注解(1)

controller注解会被解析为具体跳转路径,而加上了@ResponseBody,则不会经过视图解析器,从而返会什么数据,页面打印什么数据。value和name代表着参数的名字,required代表着是否需要出现在路径后,defaultValue代表默认的值。上面代码所示,id的required为false,从而如果没有id时则为null,而age给了默认值。而我们看到源码就不难发现value就是name,name就是value,两个不能同时出现,比如。如果需要这份小demo,这里时链接。

2023-06-03 21:28:41 31

原创 在jvm中,字符串的所处位置的学习

对于s3,在编译时就将"a"+"b"转换为"ab";但常量池中已经含有,则将s1指向常量池中的"ab";对于s1,则直接创建在常量池中,s2,则创建在堆空间中。在jvm中,字符串的创建有两种,为以下两种。本质上还是对象的创建,从而s2还是在堆中。而在jdk1.8中,当s2调用如下方法。返回的intern,则为常量池中的ab。而intern==s1则为true。而s2还在堆中,从而对于如下。返回结果为:false。

2023-05-27 22:01:13 68 2

原创 看看上面的代码里 stockDetailTo的Id是null还是save方法后保存到数据库里的值

看看上面的代码里 stockDetailTo的Id是null还是save方法后保存到数据库里的值。

2023-05-22 21:33:42 54 1

原创 nginx在前后端分离的项目中如何跨域(windows环境)

后端的具体端口:http://localhost:88/api(由网关再转发到具体的服务,进行过滤)最后的proxy_pass 就是所要转发的网关的端口,而之后再由网关转发到具体的服务。后端在前端中的暴露端口:http://localhost:8082/api。在nginx里的config文件夹里进行配置,找到nginx.conf。前端对外暴露端口:http://localhost:8080。用具体的if来判断跨域。

2023-05-04 15:33:28 244

原创 RabbitMQ的学习总结(1)

RabbitMQ的学习总结

2023-02-08 18:51:47 50

原创 用数学规律找字母编排,去解决leedcode上的第6题

题目描述:将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。请你实现这个将字符串进行指定行数变换的函数:比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。string convert(string s, int numRows);...

2022-01-23 20:54:29 71

原创 超级简单的思想,去解决leedcode上的第四题,关于两个正序数组的中位数

两个数组整合,排序成一个数组,然后找奇偶。

2022-01-21 20:20:00 596

原创 leedcode的第二题,用一种最简单的方法去做。

题目描述:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9

2022-01-10 22:45:55 83

原创 链式存储从一个文件往另一个文件中读取指定信息

对写入文件信息的查找并读入另一个文件

2022-01-07 18:00:50 711

原创 【无标题】

输入N个学生,m门课程的成绩,分别编写函数实现下列功能:(1)计算每个学生的平均分;(2)计算每个学生的总分;(3)计算每门课的平均分;(4)对N个学生按照总分由高到低排名;(5)计算每个学生平均分的方差要求:主函数调用每个函数计算相应结果并输出。1.将第一个要求,第二个要求,第五个要求可以结合在一起去设计算法,用二维数组去将课程和成绩排列!而N个学生和M个课程可以用宏定义在函数前面定义,算法就可以采用for循环去解决!具体算法呈现如下:void average(int a[n][m])

2021-12-10 16:05:51 1015 2

原创 2021-11-08

生活不易,给小哥一点支持!!!编写计算正方体、圆柱体、球体的表面积和体积的类。要去:(1) 这三个类有一个公共的基类;(2) 这三个类计算正方体、圆柱体、球体的表面积和体积的成员函数名字相同;(3) 按照运行时的多态性方法设计一个测试主函数,并进行测试。#includeusing namespace std;class body {protected:float length;float width;float height;double v;double s;public:vi

2021-11-08 19:40:08 221 2

PolandNotation.class

PolandNotation.class

2022-10-16

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

TA关注的人

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