Loading

01 2022 档案

摘要:悲观锁 概念 悲观锁在已最坏的打算来考虑结果,它会在每次资源操作的同时,都需要对他进行加锁,避免其他的线程来抢占。在绝对上保证我这次执行是没有问题的。 适用场景 悲观锁适用于竞争激励的场景,例如高并发的读写操作。 典型案例 synchronized 关键字 public class TestLock 阅读全文
posted @ 2022-01-30 23:54 邓小白 阅读(147) 评论(0) 推荐(0) 编辑
摘要:锁的七大类 在Java的多线程中,有很多种锁,每种锁可能同时占有多个标准,比如ReentranLock即可是中断锁,又可以是可重入锁。 那么根据分类标准,我们可以把这些锁分为以下七大标准,分别是: 偏向锁/轻量级锁/重量级锁 可重入锁/非可重入锁 共享锁/独占锁 公平锁/非公平锁 悲观锁/乐观锁 自 阅读全文
posted @ 2022-01-29 15:22 邓小白 阅读(1232) 评论(0) 推荐(0) 编辑
摘要:下载官方安装包 下载地址:https://www.macports.org/install.php 选择自己的下载版本 安装MacPorts 步骤一:断开网络 步骤二:安装安装包 如果步骤一没断网成功会导致安装卡住,如果卡住了,需要强制退出软件 首先使用option+command+esc打开强制退 阅读全文
posted @ 2022-01-29 15:21 邓小白 阅读(11354) 评论(0) 推荐(0) 编辑
摘要:什么是Java Agent Java Agent是在Java 1.5版本之才有的东西,他可以构建一个独立Java服务外的一个代理程序,也就是Agent。通常会用它来做一下Java服务的监控,或者替换其他JVM上的程序,还可以实现虚拟机上的AOP功能。 Agent分为两种,一种是程序启动前触发的,一种 阅读全文
posted @ 2022-01-29 15:20 邓小白 阅读(1797) 评论(0) 推荐(0) 编辑
摘要:关闭线程池的方法 shutdown() 在调用这个关闭方法时,线程池会根据我们配置的拒绝策略来拒绝掉想要进来的线程,也就是说吧创建执行线程的入口给关闭掉了,直到线程池内的所有线程都执行完成。在调用这个方法完毕之后,并不代表这个线程池就真的都停掉了,只能说他不让其他线程进来了,然后等到线程池内的线程执 阅读全文
posted @ 2022-01-29 15:20 邓小白 阅读(1896) 评论(0) 推荐(0) 编辑
摘要:在了解线程复用原理之前,我们再回顾一下之前在线程池的初始配置详解的文章中提到的创建线程的流程 在线程提交线程任务的时候,线程池会提前判断线程池中执行的任务是否达到核心线程数了,如果达到了核心线程数那么他就会将这个多出来的任务塞入队列中,如果发现队列中的任务数也达到了上限,这个时候线程池就会开始在核心 阅读全文
posted @ 2022-01-29 15:20 邓小白 阅读(642) 评论(0) 推荐(0) 编辑
摘要:我们在创建自己的线程池时,会时常因为不知道给核心线程数或者最大线程数设置多少为好,其实这个时需要看你的线程池的使用场景和服务器CUP的配置,根据这些前置条件,我们再去判断如何去设置合适的线程数,并不是我们想设置多少线程数大小就可以设置多少,这样可能会导致线程发挥不到最大的性能,甚至还有可能会导致服务 阅读全文
posted @ 2022-01-29 15:19 邓小白 阅读(1885) 评论(2) 推荐(0) 编辑
摘要:线程被拒绝的场景 结合上面的图,我们思考一个问题,当我们创建一个线程池的时候,他会有最大的线程数,和线程任务缓存数。如果系统的线程任务突然暴增,这个时候,线程池的线程达到最大值,线程队列中的缓存数也达到了最大值,这个时候,没有挤进线程池的该怎么办。 在使用线程池的时候,可能会遇到两种情况,导致线程会 阅读全文
posted @ 2022-01-29 15:18 邓小白 阅读(1145) 评论(0) 推荐(0) 编辑
摘要:简介 我们在了解完线程池的参数配置和常用线程池后发现,每种线程池会根据不同的需求去选择不同的队列来存储线程任务。线程池的对应队列如下: 可以看到,五大常用的线程池,会用到三种线程池 LinkedBlockingQueue LinkedBlockingQueue是一种没有容量上限的队列,也就是说,用了 阅读全文
posted @ 2022-01-29 15:18 邓小白 阅读(1027) 评论(0) 推荐(0) 编辑
摘要:创建一个线程池 首先我们看一个创建线程池的例子 执行类 public class ThreadInit { /** * corePoolSize - 要保留在池中的线程数,即使它们处于空闲状态,除非设置了allowCoreThreadTimeOut * maximumPoolSize - maxim 阅读全文
posted @ 2022-01-29 15:17 邓小白 阅读(538) 评论(0) 推荐(0) 编辑
摘要:在看这篇文章之前,请先了解一下线程的初始配置参数。 六大线程池 在我们日常业务开发中,如果遇到使用线程池的场景时,会先去思考一下这种场景需要使用到怎样的线程池,去避免线程资源滥用。这个时候选择困难症就来了,不过不用担心,Java其实早就已经给我们提供了六种快速创建线程池的方法,并且不需要设置繁琐参数 阅读全文
posted @ 2022-01-24 19:45 邓小白 阅读(6306) 评论(0) 推荐(0) 编辑
摘要:创建一个线程池 首先我们看一个创建线程池的例子 执行类 public class ThreadInit { /** * corePoolSize - 要保留在池中的线程数,即使它们处于空闲状态,除非设置了allowCoreThreadTimeOut * maximumPoolSize - maxim 阅读全文
posted @ 2022-01-24 19:45 邓小白 阅读(753) 评论(0) 推荐(0) 编辑
摘要:什么是线程池 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙 阅读全文
posted @ 2022-01-24 19:44 邓小白 阅读(885) 评论(0) 推荐(0) 编辑
摘要:什么是线程安全 《Java Concurrency In Practice》的作者 Brian Goetz 对线程安全是这样理解的,当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行问题,也不需要进行额外的同步,而调用这个对象的行为都可以获得正确的结果,那这个对象便是线程安 阅读全文
posted @ 2022-01-24 19:43 邓小白 阅读(172) 评论(0) 推荐(0) 编辑
摘要:有哪些场景需要额外注意线程安全 访问共享变量或资源 当在多线程的环境下,多个线程去访问共享的缓存或者对象时,同时操作会对结果造成不用程度的改变,尤其是在操作上不具备原子性的操作上时会发生这种情况,例如我们之前在【线程安全】 三类线程安全问题章节说到的i + +问题,他其实就属于一种对共享变量访问时, 阅读全文
posted @ 2022-01-24 19:43 邓小白 阅读(149) 评论(0) 推荐(0) 编辑
摘要:在html的头部加上: <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> 转载于: nginx http请求无法加载https的css样式 阅读全文
posted @ 2022-01-24 19:42 邓小白 阅读(317) 评论(0) 推荐(0) 编辑
摘要:简单介绍一下Condition,Condition是Java1.5开始出现的,其出现的目的就是为了替代传统的Object的wait()、notify()实现线程间的协作。相比传统的方式使用Condition的await()、signal()这种方式实现线程间协作更加安全和高效。 常用方法介绍 方法名 阅读全文
posted @ 2022-01-24 19:41 邓小白 阅读(213) 评论(0) 推荐(0) 编辑
摘要:什么是生产者消费者模式 生产者消费者模式其实是一种设计模式,在生活中四处可见,比如我们在排队买奶茶,奶茶店里面的店员去生产奶茶,然后给消费者消费,在这里,店里面的店员就是一个生产者,顾客就是一个消费者。并且在生产者消费者的概念中,生产者和消费者是一一对应的,也就是说,奶茶店里面的店员生产了一杯奶茶只 阅读全文
posted @ 2022-01-24 19:41 邓小白 阅读(210) 评论(0) 推荐(0) 编辑
摘要:使用方法 wait 方法 作用 wait() 将当前运行的线程挂起(即让其进入阻塞状态),直到notify或notifyAll方法来唤醒线程。 wait(long timeout) 该方法与wait()方法类似,唯一的区别就是在指定时间内,如果没有notify或notifAll方法的唤醒,也会自动唤 阅读全文
posted @ 2022-01-24 19:40 邓小白 阅读(451) 评论(0) 推荐(0) 编辑
摘要:线程的六大状态 在多线程从创建到销毁,可能会经历六种状态 这六种状态我们可以看一下Java多线程的源码中是怎么解释的 public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** 阅读全文
posted @ 2022-01-24 19:39 邓小白 阅读(56) 评论(0) 推荐(0) 编辑
摘要:停止线程有四种方式 方式一 通过volatile标识去判断退出线程 public class VolatileCanStop implements Runnable{ private static volatile boolean canceled = false; @Override public 阅读全文
posted @ 2022-01-23 22:32 邓小白 阅读(329) 评论(0) 推荐(0) 编辑
摘要:方法一 继承Thread类 public class Thread01 extends Thread{ @Override public void run() { System.out.println(Thread.currentThread().getName()+" is running..." 阅读全文
posted @ 2022-01-23 22:32 邓小白 阅读(33) 评论(0) 推荐(0) 编辑
摘要:操作模块 可支持的 3 种基本操作,即 PUT、GET 和 DELETE PUT:新写入或更新一个 key-value 对; GET:根据一个 key 读取相应的 value 值; DELETE:根据一个 key 删除整个 key-value 对。 存储模块 Redis是一个非关系型数据库,基本的数 阅读全文
posted @ 2022-01-23 22:31 邓小白 阅读(127) 评论(0) 推荐(0) 编辑
摘要:lsof命令 注意事项:lsof在linux环境下可能需要进行安装后才能使用 安装命令: yum install lsof lsof -i 显示所有打开的端口 lsof -i:8080 显示所有打开8080端口的进程 netstat命令 netstat -ntlp 查看当前所有tcp端口 netst 阅读全文
posted @ 2022-01-23 22:28 邓小白 阅读(658) 评论(0) 推荐(0) 编辑
摘要:作用 BlockingQueue为一个阻塞队列,这里的阻塞有两个含义 从队列中获取元素时,如果队列为空,获取元素的线程会等待至队列中有元素再返回。 往队列添加元素时,如果队列已满,添加元素的队列会等待至队列有位置的时候再添加新的元素 特点 BlockingQueue中的元素不能为空 为线程安全的,但 阅读全文
posted @ 2022-01-23 22:27 邓小白 阅读(231) 评论(0) 推荐(0) 编辑
摘要:MyBatis的缓存机制 MyBaits现在已经是市面上最常见的数据库访问框架了,也是用的最频繁的框架中的一种,很多时候我们在开发中,访问数据时在进行优化系统的性能,都会考虑到以缓存这种机制来进行优化。在MyBatis中也有缓存机制,但是在大部分时间里,我们常常都是用的MyBais的默认缓存配置。在 阅读全文
posted @ 2022-01-23 22:26 邓小白 阅读(249) 评论(0) 推荐(0) 编辑
摘要:ROUND_UP 舍入远离零的舍入模式。 在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。 注意,此舍入模式始终不会减少计算值的大小。 例如:0.121->0.13 ROUND_DOWN 接近零的舍入模式。 在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。 阅读全文
posted @ 2022-01-23 22:26 邓小白 阅读(858) 评论(0) 推荐(0) 编辑
摘要:ScheduledExecutorService是一个可以用来定期执行线程任务的线程池,主要功能体现在,周期性执行线程任务和延迟时间来执行线程任务。主要特性体现在下面要讲解的四个方法中 方法一,延迟执行任务,不获取返回值 在指定delay(延迟)之后,执行提交Runnable的任务,返回一个Sche 阅读全文
posted @ 2022-01-23 22:25 邓小白 阅读(595) 评论(0) 推荐(0) 编辑
摘要:Java跟c++语言一样,都是面向对象的语言,那么面向对象的语言都有个共同的两点 在面向对象的软件中,对象(Object)是某个类(Class)的实例。 一切皆对象 在JVM的内存结构中,对象保存在堆内存中,而我们在对对象进行操作时,其实操作的是对象的引用。 那么对象本身在JVM中的结构是什么样的呢 阅读全文
posted @ 2022-01-23 22:25 邓小白 阅读(339) 评论(0) 推荐(0) 编辑
摘要:runAsync和supplyAsync方法,这个两个方法为CompletableFuture的主要使用方式,其主要作用给任务提供异步线程的操作方式 如何使用 CompletableFuture 提供了四个静态方法来创建一个异步操作。 public static CompletableFuture< 阅读全文
posted @ 2022-01-23 22:24 邓小白 阅读(417) 评论(0) 推荐(0) 编辑
摘要:现象: 工作时遇到某个服务老是频繁重启,日志报错为OOM 分析: 出现OOM是因为整个堆内存不够用了,此时JVM首先尝试扩展更多的空间,其次GC尝试回收内存,前两种方法无果的情况下只能报OOM并退出 可能的情况:内存不够、内存泄漏 尝试解决问题的步骤: 加上JVM参数 -XX:+HeapDumpOn 阅读全文
posted @ 2022-01-23 22:24 邓小白 阅读(1441) 评论(0) 推荐(0) 编辑
摘要:SSM框架是JavaWeb必学的框架,虽说是基本的增删改查的操作,但是面临一些特殊情况的时候,又是还是会显得手足无措,此篇用来记录一下一写特殊场景下的Mybatis框架的应用 1、传入参数为List对象 1.场景复现 首先有如下一张表 MySQL [test]> select * from t_en 阅读全文
posted @ 2022-01-23 22:23 邓小白 阅读(824) 评论(0) 推荐(0) 编辑
摘要:第一步 打开server.xml文件 第二步 在两处配置位置添加URIEncoding="UTF-8" 第一处 <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redir 阅读全文
posted @ 2022-01-23 22:23 邓小白 阅读(187) 评论(0) 推荐(0) 编辑
摘要:Java跟c++语言一样,都是面向对象的语言,那么面向对象的语言都有个共同的两点 在面向对象的软件中,对象(Object)是某个类(Class)的实例。 一切皆对象 在JVM的内存结构中,对象保存在堆内存中,而我们在对对象进行操作时,其实操作的是对象的引用。 那么对象本身在JVM中的结构是什么样的呢 阅读全文
posted @ 2022-01-23 22:02 邓小白 阅读(179) 评论(0) 推荐(0) 编辑
摘要:FORM 功能为指定基础镜像,并且必须是第一条指令。 如果不以任何镜像为基础,那么写法为:FROM scratch。 同时意味着接下来所写的指令将作为镜像的第一层开始 语法: () FROM <image> FROM <image> : <tag> FROM <image> : <digest> 三 阅读全文
posted @ 2022-01-23 21:49 邓小白 阅读(327) 评论(0) 推荐(0) 编辑