
Java
Small_Pang
我觉得这个机会可以改变我的生活
展开
-
ConcurrentHashmap1.7源码分析
new ConcurrentHashMap()传入默认值:容量:initialCapacity —> 16负载因子:loadFactor —> 0.75并发级别:concurrencyLevel —> 16public ConcurrentHashMap() { this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL);}新建segment0 入参为: 负载因子原创 2020-10-24 09:52:11 · 301 阅读 · 0 评论 -
HashMap1.7底层原理
hashmap在1.7中是由数组和链表组成的,存放的是Entry对象HashMap()new一个HashMap对象,会传入默认值initialCapacity=16,loadFactor=0.75,然后赋值负载因子和阈值大小;init()是在LinkedHashMap中才实现,暂不管。public HashMap(int initialCapacity, float loadFactor) { if (initialCapacity < 0) thr.原创 2020-10-13 17:10:37 · 507 阅读 · 5 评论 -
CyclicBarrier底层原理
一、流程图二、小demo实现CyclicBarrierTest.javaimport java.util.concurrent.CyclicBarrier;public class CyclicBarrierTest { public static void main(String[] args) { CyclicBarrier cyclicBarrier = new CyclicBarrier(3); for (int i = 0; i <原创 2020-09-29 15:44:50 · 256 阅读 · 0 评论 -
CountDownLatch底层原理
CountDownLatch底层原理和Semaphore差不多,就简单记录下吧!可以查看我的上一篇文章比较详细—> Semaphore底层原理一、CountDownLatchDemo1)设置了资源数量为2;2)资源数量还没减到0,countDownLatch.await()一直将线程阻塞;3)当资源数量减到0的时候,countDownLatch.countDown(),开始解锁。import java.util.Random;import java.util.concurr.原创 2020-09-28 17:15:00 · 734 阅读 · 0 评论 -
Semaphore底层原理
一、SemaphoreDemoSemaphore的应用场景就是加锁、异步、控制并发数下面demo可以理解为抢夺共享资源import java.util.concurrent.Semaphore;public class SemaphoreDemo { public static void main(String[] args) { String[] name = {"小胖", "大花", "大肥", "小桌子", "小椅子"}; Semaphore sema原创 2020-09-28 14:34:23 · 586 阅读 · 0 评论 -
ReentrantLock底层原理
一、步骤图本文的整体用一张图来分析,如果符合你想要查看的内容再继续往下看吧二、加锁阶段lock()new ReentrantLock()调用的是new NonfairSync();线程1,CAS成功修改state = 1,setExclusiveOwnerThread = thread0static final class NonfairSync extends Sync { private static final long serialVersionUID = 73161原创 2020-09-27 15:25:19 · 747 阅读 · 0 评论 -
面试题:如何优雅地结束线程?
如果你回答stop(),那就要凉凉了,stop()很快就要被放弃掉了。stop()方法相当于你在看电视想要关掉的时候,直接拔掉插头,当线程在运行着的时候,直接stop()的话,可能会导致锁资源没有释放,导致死锁的现象。我们可以使用中断阻塞的方法来中断线程,相当于把电视暂停。一、interrupt()设置中断标志InterruptDemo.javapublic class InterruptDemo { static int i = 0; public static void .原创 2020-09-25 16:59:30 · 282 阅读 · 0 评论 -
Synchronized底层原理
纯属记录个人理解,有误请指出一、Synchronized加锁方式:1)同步实例方法,锁是当前实例对象public synchronized void method() { /*修饰实例方法,锁的是当前实例对象*/}synchronized(this) { /*修饰同步代码块,锁的是当前实例对象*/}2)同步类方法,锁是该类类对象public static synchronized void method() { /*修饰静态方法,锁的是该类类对象*/}s.原创 2020-09-25 11:30:00 · 243 阅读 · 0 评论 -
面试题:Java线程的生命周期
一、在Thread的源码中有写出线程的六种状态:1)NEW:新建状态2)RUNNABLE:就绪状态源码注释为:线程在JVM的状态为RUNNABLE就绪状态,但是需要等待操作系统资源。解析:其实在操作系统内核创建线程的当前状态如果是Initialized,则调用sync -> wait(),如果线程状态被设置为RUNNABLE,则唤醒执行run()方法3)BLOCKED:阻塞状态在抢夺Synchronized锁失败之后会进入BLOCKED阻塞状态;等待状态的线程在调用notify(原创 2020-09-24 14:52:10 · 601 阅读 · 0 评论 -
统一异常处理类
因为项目中会出现特有的问题,而这些问题并未被java所描述并封装对象所以对于这些特有的问题可以按照java的对问题封装的思想。将特有的问题,进行自定义的异常封装1、自定义异常类import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@AllArgsConstructor //有参构造方法@NoArgsConstructor //无参构造方法public clas.原创 2020-09-22 10:45:54 · 945 阅读 · 2 评论 -
统一返回结果类
记录下自己用过的统一返回结果集其中有swagger注解,没有的可以删去import io.swagger.annotations.ApiModelProperty;import lombok.Data;import java.util.HashMap;import java.util.Map;/** * 统一返回结果类 */@Datapublic class R { @ApiModelProperty(value = "是否成功") private Boolean.原创 2020-09-22 10:14:23 · 835 阅读 · 1 评论 -
双重校验锁实现单例模式
1、先上代码:public class Singleton { private static volatile Singleton instance = null; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (原创 2020-08-18 20:19:32 · 488 阅读 · 0 评论 -
解决报错Table ‘passbook.hibernate_sequence‘ doesn‘t exist问题
1、报错如下图:2、解决方法:将entity表中的 @GeneratedValue 注解改成 @GeneratedValue(strategy = GenerationType.IDENTITY)即可完美解决!原创 2020-07-03 21:55:18 · 561 阅读 · 0 评论 -
代理模式的概念及Java实现
一、概念:代理模式只为对象提供一种通过代理的方式来访问并控制该对象行为的方法。在客户端不适合或者不能够直接引用一个对象时,可以通过该对象的代理对象来实现对该对象的访问,可以将该代理对象理解为客户端和目标对象之间的中介者。二、创建Company接口:package Proxy;public interface Company { void findWorker(String title);}三、创建HR实现类:package Proxy;import org.apache.co原创 2020-07-01 14:08:32 · 266 阅读 · 1 评论 -
Java统计字符串中字符出现次数
package pang.one;import java.util.HashMap;public class demo7 { public static void repeat(String str) { char[] strArr = str.toCharArray(); HashMap<Character, Integer> hashMap = new HashMap<>(); StringBuilder strin原创 2020-05-27 20:52:37 · 1184 阅读 · 0 评论 -
反射的小demo记录
1、谈谈反射反射概念:Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。2、Java练习反射demoAnimal.javapackage pang.three;public class Animal { private String name; private Integer age; public void ani原创 2020-05-25 21:08:45 · 272 阅读 · 0 评论 -
IDEA使用EasyCode插件自动生成代码
1、在IDEA中Setting—>Plugins搜索EasyCode下载插件如果搜索不到想要下载的插件,请查看 IDEA下载插件找不到解决方法2、点击Database添加数据库3、配置数据库信息如果下载的是mysql8以上的版本,都需要添加 ?serverTimezone=UTC4、选择一个表,右键选择Generate Code5、进行选择配置自动添加的代码6、查看自动添加的代码目录7、大功告成,还需其他的代码就需要自己手动添加或是配置了...原创 2020-05-19 18:37:39 · 700 阅读 · 0 评论 -
Java类的序列化顺序
前段时间笔试碰到了一个这样的问题,Java类的序列化顺序,之前从来没有见过;查阅一些资料后,自我感觉最好的回答就是它的代码了。(有更好的评论告诉我)使用序列化的原因:Java对象在JVM运行时被创建、更新和销毁,当JVM退出时,对象也会随之销毁,即这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,我们常常需要将对象及其状态在多个应用之间传递、共享,或者将对象及其状态持久化,在其他地方重新读取被保存的对象及其状态继续进行处理。这就需要通过将Java对象序列化来实现。对象序列化除了用.原创 2020-05-11 18:21:54 · 874 阅读 · 0 评论 -
Jsoup报错: PKIX path building failed
Jsoup报错提示SSL安全认证问题**解决方案:在Jsoup.connect()前面加上:trustAllHttpsCertificates();HttpsURLConnection.setDefaultHostnameVerifier(hv);需要调用的方法:HostnameVerifier hv = new HostnameVerifier() { public bool...原创 2020-02-05 00:24:52 · 1050 阅读 · 0 评论 -
Java消除字符串中的括号
Java消除字符串中的括号面试中遇到的一道简单的题目,没想到其他更简单的方法了…public class Test { StringBuffer result = new StringBuffer(); public String change(String[] str) { for (int i = 0; i<str.length; i++){ ...原创 2019-10-29 09:56:20 · 5210 阅读 · 0 评论 -
Java实现MD5密码加密
Java实现MD5密码加密简单解释一下下面的代码:首先指定加密的方式,然后自定义十六进制的字符;加密的运算自定义:遍历加密后的密码,将每个元素向右位移4位,然后与15进行与运算(byte变成数字)public String passwordMD5(String userName, String userPassword) { // 需要加密的字符串 St...原创 2019-10-15 15:27:46 · 811 阅读 · 0 评论