自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

岁月流逝

岁月流逝,唯心不止

  • 博客(21)
  • 资源 (1)
  • 收藏
  • 关注

原创 ThreadPoolExecutor源码详解

1.常用变量解析 //ctl可以看作一个int类型的数字,高3位表示线程池的状态,低29位表示worker数量 private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); //integer.size为32,所以COUNT_BITS为29,表示低29位 private static final int COUNT_BITS = Integer.SIZE - 3; //线程允许的最大线程

2021-01-13 07:35:05 229

原创 ThreadLocal源码及内存泄漏原理(强软弱虚)解析

一、什么是ThreadLocal?线程局部变量,同一个ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本,不与其他线程共享。适用于每个线程需要自己独立的实例且该实例需要在多个方法中被使用,也即变量在线程间隔离而在方法或类间共享的场景。二、源码解析首先我们来一看段小demo:public class ThreadLocalDemo { static class Person{ String name = "aaa"; } static

2020-12-05 10:27:10 387

原创 String的不可变性详解

一、前言相信很多人都对String了如指掌,String的value被声明为final不可改变,看似一个很简单的问题,可是String的不可改变究竟是什么不可改变?又是如何实现不可变的呢?二、案例详解下面让我看一个demo:import java.lang.reflect.Field;public class Test { public static void main(String[] args) throws NoSuchFieldException, IllegalAccessEx

2020-08-26 07:56:21 696

原创 手动实现一个LinkedList链表

前言:一切从简,本链表存放int数据,不适用泛型一、实现思路(1)void add():对链表进行尾插(2)int get(int index):依据传入的索引,找到对应元素(3)int remove(int index):依据传入的索引,删除对应元素,并返回被删除的元素值(4)int set(int index, int val):依据传入的索引和值,将对应元素的值改为传入值,并返回修改前的值(5)int size():返回容器中的元素个数二、实现步骤1)创建一个链表的容器先定义两个指针

2020-08-24 11:11:19 247

转载 AQS源码解读——释放锁

ReentrantLock的公平锁和非公平锁的释放锁的逻辑从源码层面上来看是相同的,我们直接看ReentrantLock的unlock()方法:调用了sync内部类的release(),Sync对于父类AQS的release()并未重写,走到了AQS中:tryRelease(arg)也是一个模板方法,由子类来实现:最终走到ReentrantLock的tryRelease():这块就是ReentrantLock的释放锁逻辑:在释放锁的时候,先给state值减1,并且当前线程必须是持有锁的线程

2020-08-14 07:42:16 288

转载 AQS源码解读——公平锁上锁

一、公平锁源码解析老样子,先创建一个公平锁上锁的demo,方便后续跟源码:public class ReentrantLockDemo { public static void main(String[] args) { // 构造方法传入true是公平锁的创建方式 final ReentrantLock lock = new ReentrantLock(true); try { // 公平锁的加锁入口 loc

2020-08-12 07:41:58 241

转载 AQS源码解读——非公平锁上锁

一、什么是AQSAQS是AbstractQueuedSynchronizer的缩写,是JUC包下的一个同步器框架,它对于原子性同步状态的管理,线程的挂起与唤醒,以及多线程竞争锁的排队等提供了一系列通用的机制。让我们自己可以通过AQS很容易的实现自己的一把定制化锁,包括JUC包下的同步工具CountdownLatch、ReentrantLock、Semaphore等都是通过AQS来进行管理内部的同步状态。二、AQS的使用(1) 先搞一个ReentantLock的调试Demopackage com.zs

2020-08-11 08:50:40 213

原创 线程池线程复用原理(源码详解)

1.什么是线程复用?在线程池中,同一个线程去执行不同的任务,这就是线程复用。假设有50个任务,线程池设置核心线程数为3,等待队列数设置为5,那么执行这50个任务时,这3个核心线程和2个非核心线程就会不停的复用,进行任务的执行。2.线程复用原理解析2.1线程池的工作流程当任务提交之后,线程池首先会检查当前线程数,如果当前的线程数小于核心线程数(corePoolSize),则新建线程并执行任务。当提交的任务不断增加,创建的线程数等于核心线程数(corePoolSize),新增的任务会被添加到 wo

2020-07-03 11:33:37 2127

转载 Semaphore详解及代码示例

1.什么是Semaphore?Semaphore是JDK提供的一个同步工具,它通过维护若干个许可证来控制线程对共享资源的访问。 如果许可证剩余数量大于零时,线程则允许访问该共享资源;如果许可证剩余数量为零时,则拒绝线程访问该共享资源。 Semaphore所维护的许可证数量就是允许访问共享资源的最大线程数量。 所以,线程想要访问共享资源必须从Semaphore中获取到许可证。2.Semaphore有哪些常用方法?有acquire方法和release方法。 当调用acquire方法时线程就会被阻塞,直到S

2020-06-11 16:10:33 818 1

原创 Linux上安装Docker

一、安装步骤1.Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker ,通过 uname -r 命令查看你当前的内核版本: $ uname -r2.使用 root 权限登录 Centos。确保 yum 包更新到最新。$ sudo yum update3.卸载旧版本(如果安装过旧版本的话)$ sudo yum remove docker docker-common docker-selinux docker-

2020-05-25 11:35:15 19060

原创 使用Docker搭建MySQL服务

拉取官方镜像(我们这里选择5.7,如果不写后面的版本号则会自动拉取最新版)docker pull mysql:5.7 # 拉取 mysql 5.7docker pull mysql # 拉取最新版mysql镜像检查是否拉取成功$ sudo docker images一般来说数据库容器不需要建立目录映射sudo docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7–n

2020-05-25 11:03:15 459

原创 JS变量作用域问题及闭包函数解决方案

代码示例<div> <input type="text" id="inp1" value="1"></input> <input type="text" id="inp2" value="2"></input> <input type="text" id="inp3" value="3"></input></div><script> for(var i=1;i<=3;i++){

2020-05-22 15:14:30 195

原创 java获取多线程返回值

对于多线程大家都不陌生,可以提高咱们程序的执行效率,但是各线程之间都是独立运行,如何来获取各个线程的数据并集中处理呢?废话少说,下面上代码。1.首先多线程要实现Callable接口,记住是Callable,一定要加上object泛型:public class ReportThread implements Callable<Object> { private Integer...

2019-10-30 09:18:49 5771 1

原创 java获取本周一及周日的日期

由于工作中使用到这个功能,代码不难,记录一下便于日后自己查阅,也希望对看到的小伙伴们有所帮助O(∩_∩)O哈哈~public static void main(String[] arg0){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getI...

2019-10-17 08:55:13 6230 2

原创 常见的几种分布式锁

Q:一个业务服务器,一个数据库,操作:查询用户当前余额,扣除当前余额的3%作为手续费synchronized lock db lockQ:两个业务服务器,一个数据库,操作:查询用户当前余额,扣除当前余额的3%作为手续费分布式锁我们需要怎么样的分布式锁? 可以保证在分布式部署的应用集群中,同一个方法在同一时间只能被一台机器上的一个线程执行。 这把锁要是一把可重入锁(避...

2019-02-22 10:47:25 22448 1

转载 hash算法详解

哈希Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。所有散列函数都有如下一个基本特性:根据同一散列函数...

2019-02-22 10:39:37 1747

转载 dubbo详解及demo实例

1. Dubbo是什么?Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者...

2018-02-25 10:57:37 18787 5

原创 Linux服务器常用操作命令总结

一、 Linux几个常用操作命令 (一) cd命令 此命令是进入指定目录或当前位置文件夹命令,格式如下: cd 目录或当前位置文件夹 示例: (1)cd /home/test : 进入/home/test路径。 (2)cd test : 进入当前位置下的test文件夹。(二) pwd命令 此命令是查看当前位置命令,直接输入pwd回车即可。(三) ls命令 此命令是查看指定目录或当前

2016-12-12 09:05:30 1840

原创 关于项目感叹号及报错调试的一点心得

项目出现感叹号,基本上就是jar包引用错误,要么是路径错误要么就是少了jar包,再就是引用的项目没有导入,jar报齐全,当引用没问题时,项目还有红叉的时候那就是编译版本不一致的问题了1.先设置好jdk,需要确定 项目,eclipse/myeclipse,系统 用的是同一个版本的JDK,我系统中安装的JDK是1.6,所以我把eclipse的jdk成1.62.右键你的项目,properties——jav

2016-12-05 15:46:33 1315 2

原创 RSA加密解密详解

package cn.com.mink.util;import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import ja

2016-12-05 15:08:58 1618 1

转载 JfreeChart使用详解及实例

前提:导入需要的2个jar文件,jcommon-版本号.jar,jfreechart-版本号.jar。可以去官网下载:http://sourceforge.net/projects/jfreechart/files/注意:下载的Jfreechart版本不要太高,新版本对中文的显示会出问题,我自己后来下的是1.0.10的版本实例一:比较简单的application版本的饼图package com.te

2016-12-05 14:49:48 822

FileLocator Pro(文件搜索工具).rar

非常强大的一款全局文本搜索工具,平时的搜索工具只能搜索文件名,而这个工具可直接搜索文本的内容,很实用!

2019-07-08

空空如也

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

TA关注的人

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