自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 09.线程基础知识(八)----线程池

线程池 1.自定义线程池 代码实现 import lombok.extern.slf4j.Slf4j; import java.util.ArrayDeque; import java.util.Deque; import java.util.HashSet; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Reentr

2021-11-01 23:07:35 180

原创 08.线程基础知识(七)java内存模型

java内存模型 JMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、 CPU 指令优化等。 JMM 体现在以下几个方面 原子性 - 保证指令不会受到线程上下文切换的影响 可见性 - 保证指令不会受 cpu 缓存的影响 有序性 - 保证指令不会受 cpu 指令并行优化的影响 1.可见性 退不出的循环 先来看一个现象,main 线程对 run 变量的修改对于 t 线程不可见,导致了 t 线程无法停止: static boolean r

2021-10-26 14:19:03 130

原创 07.线程基础知识(六)同步模式之顺序控制

同步模式之顺序控制 1.固定运行顺序 public class Test9 { public static void main(String[] args) { Thread t1 = new Thread(() -> { log.debug("1"); }, "t1"); Thread t2 = new Thread(() -> { log.debug("2"); }, "

2021-10-24 23:34:43 99

原创 06.线程基础知识(五)ReentrantLock锁

ReentrantLock锁 1.多把锁 一间大屋子有两个功能:睡觉、学习,互不相干。 现在小南要学习,小女要睡觉,但如果只用一间屋子(一个对象锁)的话,那么并发度很低 解决方法是准备多个房间(多个对象锁) class BigRoom { private final Object studyRoom = new Object(); private final Object bedRoom = new Object(); public void sleep() { synchronized

2021-10-24 23:33:47 191

原创 05.线程基础知识(四)异步模式之生产者/消费者

异步模式之生产者/消费者 1. 定义 要点 与前面的保护性暂停中的 GuardObject 不同,不需要产生结果和消费结果的线程一一对应 消费队列可以用来平衡生产和消费的线程资源 生产者仅负责产生结果数据,不关心数据该如何处理,而消费者专心处理结果数据 消息队列是有容量限制的,满时不会再加入数据,空时不会再消耗数据 JDK 中各种阻塞队列,采用的就是这种模式 为什么叫异步? 因为产生的值,不能立刻被消费。 2.代码实现 import lombok.extern.slf4j.Slf4j; import

2021-10-24 01:14:36 165

原创 04.jdk1.8常用API

tiltle:自编jdk1.8API常用文档(按功能划分) 1.输入 包 import java.util.Scanner; ----不是lang包就要导入 new Scanner scanner = new Scanner(System.in); next()----获取 next()方法读取到空白符就结束; 输入: 返回:String scanner.next() nextLine()—获取行 nextLine()读取到回车结束也就是“\r” 输入: 返回:String scanner..

2021-10-23 23:39:58 2257

原创 03.线程基础知识(三)---同步模式之保护性暂停

同步模式之保护性暂停 1. 定义 即 Guarded Suspension,用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程,让他们关联同一个 GuardedObject 如果有结果不断从一个线程到另一个线程那么可以使用消息队列(见生产者/消费者) JDK 中,join 的实现、Future 的实现,采用的就是此模式 因为要等待另一方的结果,因此归类到同步模式 2.代码实现 @Slf4j(topic = "c.Test1") public class Test1 {

2021-10-23 23:18:03 82

原创 02.线程基础知识(二)Wait&notifiy

Wait&notifiy 小故事 - 为什么需要 wait 由于条件不满足,小南不能继续进行计算 但小南如果一直占用着锁,其它人就得一直阻塞,效率太低 于是老王单开了一间休息室(调用 wait 方法),让小南到休息室(WaitSet)等着去了,但这时锁释放开, 其它人可以由老王随机安排进屋 直到小M将烟送来,大叫一声 [ 你的烟到了 ] (调用 notify 方法) 小南于是可以离开休息室,重新进入竞争锁的队列 wait&notifiy原理 Ownner线程发现条件不满足,调用wa

2021-10-23 18:36:15 244

原创 01.线程基础知识(一)

线程基础知识(一) 线程状态 从操作系统层面5种状态 【初始状态】仅仅在语言层面创建了线程对象,还未与操作系统线程关联 【可运行状态】(就绪状态)指该线程已经被创建(与操作系统线程关联),可以由cpu调度执行 【运行状态】 指获取了cpu时间片运行中的状态 当cpu时间片用完,会从【运行状态】转换至【可运行状态】,会导致线程上下文切换 【阻塞状态】 如果调用了阻塞的API,如BIO读写文件,这是该线程实际不会调用CPU,会导致线程上下文切换,进入【阻塞状态】 等BIO操作完毕,会由操作系统唤醒阻

2021-10-22 18:09:57 101

原创 01.docker入门教程

docker安装 如果安装过卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker

2021-10-20 10:22:45 63

原创 02.动态规划

最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1: 输入:nums = [10,9,2,5,3,7,101,18] 输出:4 解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。 示例 2: 输入:nums = [0,1,0,3,2,3] 输出:4 示例 3: 输

2021-08-19 18:27:26 55

原创 01.王大锤字节面试题

我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误。但是,优秀的人总能在平凡的工作中发现真理。我发现一个发现拼写错误的捷径: 1. 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello 2. 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello 3. 上面的规则优先“从左到右”匹配,即如果是AABBCC,虽然AABB和BBC

2021-08-18 18:05:42 278

原创 01.sql的语法基础

增(insert) 第一种形式 INSERT INTO table_name VALUES (value1,value2,value3,...); 第二种形式 INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...); INSERT INTO Websites (name, url, alexa, country) VALUES ('百度','https://www.baidu

2021-07-09 11:48:39 56

空空如也

空空如也

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

TA关注的人

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