自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xun

  • 博客(22)
  • 收藏
  • 关注

原创 Java并发 - Future

Future代表了异步计算的结果。内含一些方法,可以检查任务是否完成,获取任务执行结果,并且可以取消任务。isDone() 检查任务是否已经完成get() 获取任务结果,若任务未完成则阻塞get(long timeout, TimeUnit unit) 带有时限的等待cancel(boolean mayInterruptIfRunning) 取消任务isCancelled() 是否已被取消Future的设计是自相矛盾的。它本来代表异步计算的结果,但是get()又是阻塞的。相当于使用get()

2020-07-29 19:03:30 207

原创 JUC - Semaphore应用与源码解析

Semaphore,信号量通常用于限流。简单使用 public static void main(String[] args){ Semaphore s = new Semaphore(3, true); for(int i = 1; i <= 10; i++){ new Thread(() -> { try { s.acquire(); .

2020-07-23 19:28:47 141

原创 ThreadLocal源码解析及避坑指南

ThreadLocal 是线程私有领地,其他线程无法访问。本文首先给出一个简单的使用示例,接下来主要解析ThreadLocal的原理,继而探索可能出现的内存泄漏。一个小栗子public static void main(String[] args) { final ThreadLocal<String> tl = new ThreadLocal<>(); tl.set("ThreadLocal Test"); new Thread(() -> .

2020-07-20 13:05:41 256

原创 线程池(一)Java线程与OS进程

本文主要以实战的方式,探索Java语言中的Thread与OS中进程(线程)的关系,探索OS创建线程的细节,并总结其中的资源消耗。通过这个过程,你就知道为什么要使用线程池。随处可见的论调在生产环境中,为每个任务分配一个线程的做法存在一些缺陷,尤其当并发量很高的时候。创建和销毁线程的代价相当高。活跃的线程会消耗系统资源,尤其是内存。稳定性难以保证。可创建线程的数量受多个条件限制,包括JVM的启动参数、Thread构造函数中请求的栈大小以及底层操作系统的限制。基于此,线程池的优势就体现出来了.

2020-07-03 13:30:02 671

原创 java并发编程之 Lock的优势

本文导论:JDK1.5 中新增了Lock接口及其一众实现类,作者是大神 Doug Lea。Lock是一种在多线程环境下控制访问共享资源的工具。在此之前,已经有关键字synchronized用于同步,那么为什么还需要再造一个新的同步工具呢?Lock相比synchronized有什么优势?...

2020-06-30 15:12:43 343

原创 编译 Spring5.1.x

首先,按照这个教程搞一遍优秀的教程根据我的经验,最后当运行测试用例的时候,会出现各种找不到类,找不到符号。这时候把对应的module的build和out删掉,运行其中的测试用例重新生成build和out。然后就成功了。...

2020-03-18 16:20:15 236

原创 HashMap常见问题

hashMap如何计算key的hash值?为什么?hash = (h=key.hashCode()) ^ (h >>> 16)因为在计算下标值的时候,采用的公式是index = (n-1) & hash其中n是table的长度。一般情况下,table的长度不会超过2^16,因此hash的高16位往往无法参与到index的计算中来。为了降低hash碰撞的概率...

2020-02-25 11:25:40 255

原创 LVS详解

随着互联网的发展,高并发的场景越来越多。然而单个tomcat能承受的并发量是有限的,工程师们就通过架设服务器集群来弥补单机并发量瓶颈,所以就有了分布式服务。我们还想每台服务器处理的请求数尽量均衡,所以就有了负载均衡。今天就来聊一聊在负载均衡中举足轻重的LVS。首先聊一聊tomcat为什么慢我们知道OSI七层网络模型和四层TCP/IP协议,前者是一种标准和规范,后者是基于此规范的一个实实在在...

2019-12-12 16:32:12 161

原创 xshell连接本地虚拟机ubuntu

今天在虚拟机中搭建了Ubuntu kylin 16.04,用xshell通过公钥方式连接登陆虚拟机,记录一下配置过程。通过Xshell生成一对密钥/公钥。点击“工具”->“新建用户密钥生成向导”。这一环节需要输入密钥加密的密码。把公钥copy至虚拟机Ubuntu的 ~/.ssh/ 目录下,并重命名为 authorized_keys在Xshell配置ssh密钥登陆即可。...

2019-12-11 13:53:27 170

原创 mysql 四种隔离级别详解

本文以一系列详细的sql语句,使你彻底理解mysql的四种隔离级别。首先以下sql查询mysql的默认隔离级别:准备工作首先新建一个表‘student’,并插入两行数据CREATE TABLE `student` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`)) E...

2019-11-30 02:03:22 351

原创 spring概念理解

alias<alias name="person" alias="person2"></alias>挺早之前,如果我要对一个别人定义好的bean起一个别名,而我没有修改applicationContext.xml的权限,那么我可以在另一个配置文件里使用别名alias。scopespring中的对象其实只有两种作用域,单例和每次都new出一个对象。singlet...

2019-11-27 17:43:11 137

原创 java 同步工具类

CountDownLatchCountDownLatch可以用来保证,一个或者多个线程在某些其他线程的操作执行完毕后再开始执行。初始化时指定一个count,程序会在await()方法的掉用处阻塞,每次调用countDown()会使得count减一,当count等于0,await后面的线程将得以执行。值得一提的是,count的值不能重置。注意,count的值被置为N,只要通过countDown(...

2019-11-26 23:59:20 136

原创 syncronized关键字详解

java中的关键字syncronized,具有以下特点:可以修饰方法或者一个代码块,属于悲观锁的一种。修饰静态方法时,加锁对象是类的Class对象,修饰非静态方法或者代码块时,锁住的是调用该方法的当前对象。可以保证原子性,可见性,可以保证原子性,可见性,不能保证有序性,即它所修饰的方法或者代码块内部的指令,是可以被jvm重排序的,这也是为什么双重检查模型需要用volatile来修饰变量的...

2019-11-26 11:20:37 219

原创 由AtomicInteger开始讲CAS

AtomicInteger底层依赖于Unsafe类,基于CAS(compare and swap)原理,可以保证更新一个Integer变量的原子性。AtomicInteger主要的三个成员变量如下。U是Unsafe类的一个实例,其中包含了一些用于操作底层的非安全的方法,虽然这些方法都是public,但是不应该随便使用,因为unsafe。VALUE代表了AtomicInteger.clas...

2019-11-12 19:52:29 157

转载 缓存穿透、缓存击穿、缓存雪崩

本文转自:https://baijiahao.baidu.com/s?id=1619572269435584821&wfr=spider&for=pcRedis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一些问题。其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解。如果对数据的一致性要求很高,那么就不能使用缓存。...

2019-07-16 10:19:52 93

转载 NSGA_II学习案例1

此文章来自网上,转来学习一下。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 % function nsga_2(pro) %% Main Function % Main program to run the NSGA-II MOEA. % Read the corresponding documentation to l

2017-11-12 22:27:25 3212 1

原创 leetcode经典题目及解法记录

leetcode经典题目

2017-10-20 22:43:50 1342

转载 mysql死锁的原因及解决办法

本文转载自http://www.jb51.net/article/78088.htm 死锁(Deadlock) 所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不

2017-10-13 16:30:57 2077

原创 自己写的java.lang.String能否被加载

如题,作者之前对于自己写的java.lang.String类能不能被加载,一直感到非常困惑,今天写代码证实了一下。上干货。 自己写类加载器:public class MyClassLoader extends ClassLoader{public Class findClass(String name){ byte[] b = null; try { b = ge

2017-09-04 23:54:43 3518 3

原创 java基础 int变量自增 效率问题

本文论述java中以下三条语句的效率问题。 1. i++; 2. i = i+1; 3. i += 1;所采用的的方法是只写出包含这三条语句的方法,编译成字节码,然后分析字节码指令。 下面是我的java源码:public class Some { public void add1(int a){ a++; } public void ad

2017-04-06 18:23:16 2038

原创 hashcode 和 equals 不得不说的故事

本文旨在介绍hashcode和equals的特征和联系。hashcode()这个方法的作用是为对象返回一个哈希值。需要注意的有以下三点:在一个程序的一次执行中,同一个对象多次返回的hashcode值,应该是一样的。除非equals方法中涉及到对象比较的部分发生了改变。而同一个程序的多次执行,返回的hashcode值可以是不同的。如果equals判断两个对象相等,那么二者调用hashcode()

2017-03-03 18:39:18 310

原创 java 静态代码块、静态变量、成员变量、构造代码块、构造方法的执行顺序

先给出几个用到的类。分析写在了注释里。父类ClassA:public class ClassA {      {          System.out.println("父类构造代码块1");      }            {          System.out.println("父类构造代码块2");      }      ClassB b

2016-09-25 06:35:57 780

空空如也

空空如也

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

TA关注的人

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