自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

u011047968的专栏

越努力越幸运

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

原创 吐血总结:AQS到底是什么?

文章目录1、概述2、基本框架2.1、AQS框架介绍2.2、AQS核心成员变量和方法3、源码分析3.1、CLH队列(FIFO)3.2、独占模式获取资源3.2.1、acquire(int)3.2.1.1、tryAcquire(int arg)3.2.1.2、addWaiter(Node mode)3.2.1.3、acquireQueued(final Node node, int arg)3.2.1.3.1、shouldParkAfterFailedAcquire(p, node)3.2.1.3.2、parkA

2020-06-30 13:30:21 1498

原创 Java中如何使用Thread和Runnable创建的线程

前言我们都知道通过继承Thread和实现Runnable接口都能创建线程,那么他们有什么区别呢?继承Thread创建线程通过extends关键字继承Thread然后覆盖其run方法就可以实现一个自己的线程。启动的时候只需要调用thread的start方法就可以了。public class ExtendThreadDemo extends Thread { //定一个线程的名称 private String name; //带参数的构造方法 ExtendThreadD

2020-06-28 17:05:18 1021 1

原创 吐血整理:Java线程池源码分析(基于JDK1.8建议收藏)

文章目录一、引言二、线程池的参数介绍1、ThreadPoolExecutor的UML图三、线程池的使用1、线程池的工作原理2、线程池类型2.1、newCachedThreadPool使用2.2、newFixedThreadPool使用2.3、newScheduledThreadPool使用2.4、newSingleThreadExecutor使用四、线程池的源码实现1、线程池的状态2、ThreadPoolExecutor重要的成员变量3、线程池中任务提交3、线程池中worker的执行4、线程池获取任务5、线

2020-06-28 10:58:10 449

原创 Java中synchronized和Lock的区别

前言最近有一个需求是需要将数据库的一些数据抽取出来放到文件文件命名方式为“FILENAME_yyyyMMddHHmmss”,例如FILENAME_20200625120011。计划使用多线程去实现,这样可能生成的文件名会有重复导致内容被覆盖,因此考虑加锁实现生成文件方式。这时候考虑到是使用synchronized还是Lock?synchronizedsynchronized是Java提供的一个并发控制的关键字。主要有两种用法,分别是同步方法和同步代码块。也就是说,synchronized既可以修饰方法

2020-06-25 14:00:20 299

原创 Java线程中wait、await、sleep、yield、join用法总结

一、wait()、notify()、notifyAll()用法obj.wait()/obj.wait(long timeout)是Object中的方法,当线程调用wait()方法,当前线程释放对象锁,进入等待队列。obj.notify()/obj.nogifyAll()是Object中的方法,唤醒在此对象上wait()的单个或者所有线程。测试代码:public class ThreadWaitNotify { public static void main(String[] args)

2020-06-25 11:23:47 2477 1

原创 JAVA线程的生命周期以及5种状态转换

一:线程的生命周期新建状态(NEW):新创建一个线程对象。就绪状态(RUNNABLE):线程对象创建后,调用该对象的start()方法。该状态的线程等待被线程调度选中,获取CPU的使用权。运行状态(RUNNING):就绪状态(RUNNABLE)的线程获取CPU时间片开始执行程序代码。阻塞状态(BLOCKED):阻塞状态是指线程因为某种原因让出了CPU使用权,直到线程再次进入就绪状态(RUNNABLE),等待再次获取CPU时间片进入运行状态。死亡状态(DEAD):run方法正常退出而自认死亡或者异

2020-06-19 17:31:59 2246

原创 BlockingQueue常用方法add、off、put、take、poll使用说明

1.BlockingQueue的定义首先将BlockingQueue提供的方法的含义解释如下:import java.util.Collection;import java.util.Queue;import java.util.concurrent.TimeUnit;public interface BlockingQueue<E> extends Queue<E> { /** * 1.在不违反容量限制的情况下将指定元素插入队列,成功则立即返回true

2020-06-18 23:08:19 5048 2

原创 计算机基础——原码、反码、补码转换

说明在看JDK源码的过程中,可以看到很多关于位运算的内容,位运算当然涉及计算机中二进制数字的存储方式以及值之间的转换,本文介绍一下二进制的三种表示方式:原码、反码、补码。概念原码: 将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值。反码:正数的反码和原码相同。如果是负数,则将原码符号位不变,其余各位取反,得到的就是负数的反码。补码:正数的补码和原码相同。如果是负数,则将原码符号位不变,其余各位取反,然后将得到的数值加1(负数的补码也可以理解成反码加1)。示例通过上面的介

2020-06-13 18:54:56 1444

原创 java中的“&”、“|”、“^”、“~”运算符怎么用?

文章目录问题:位运算符的用法&运算符|运算符^运算符~运算符问题:java源码中的位运算是如何使用的?位运算符的用法&运算符&是AND运算符,是一种位运算符。有0为0,全1为11&1=1;1&0=0;0&1=0;0&0=0; /** * &是AND运算符,是一种位运算符。有0为0,全1为1 * 运算规则如下: * 1&1=1; * 1&0=0; *

2020-06-13 13:11:34 8474 2

原创 JavaWeb中如何通过Request对象获取客户端IP地址

提供一个获取ip地址的工具类package com.leo.util;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import javax.servlet.http.HttpServletRequest;import java.io.IOException;/** * @ClassName: HttpUtil * @Description: 获取请求主机IP地址,如果

2020-06-04 23:59:25 645

原创 JavaWeb项目中如何扩展一个Request对象——包装器HttpServletRequestWrapper

一、使用场景在一个JavaWeb中我们会遇到统一处理出入参或者处理特殊参数的场景,这些场景就需要我们扩展我们的Request对象。所谓的包装器就是在原来的基础上包装一下就是在原来功能上添加一些其他功能。具体使用场景如下:处理过滤器中参数统一加解密问题需要为特殊请求扩展参数问题。二、具体实现1、首先继承HttpServletRequestWrapperpublic class MyRequestWrapper extends HttpServletRequestWrapper { p

2020-06-04 23:56:24 735

Java线程中wait,await,sleep,yield,join用法总结.pdf

Java线程中wait、await、sleep、yield、join用法汇总,文章里面总结了这些关键字的用法,并且里面带有源码帮助分析用法,此一文就可以理解这些关键字用法,推荐拥有

2020-06-28

空空如也

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

TA关注的人

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