
Java
葫芦脸小眼睛
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java-Interrupt-中断信号
1、中断信号Interrupt1.如果线程处于阻塞状态会立马退出阻塞并抛出InterruptedException异常,线程可以通过捕获InterruptedException方法来做一定处理,然后让线程退出。2.如果线程处于运行中则不受任何影响继续运行,仅仅将线程的中断标记设置为true。2、示例代码public class ThreadInterruptDemo { pu...原创 2020-01-03 10:33:07 · 511 阅读 · 0 评论 -
Java 阻塞队列
1、阻塞队列方法/处理方式 抛出异常 返回特殊值 一直阻塞 超时退出 插入方法 add(e) offer(e) put(e) offer(e, time, unit) 移除方法 remove(e) poll() take() poll(time, unit) 检查方法 element() pe...原创 2020-01-03 10:31:59 · 260 阅读 · 0 评论 -
Java 查询Word是否存在关键字,并保留word路径到txt
1、查询文件夹下的Word文件是否存在某些关键字,如果存在将Word文件的路况保存到txt中。2、示例代码import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.Writer;im...原创 2019-12-30 10:00:49 · 1334 阅读 · 0 评论 -
Java 线程池
1、线程池Java中的线程池创建实际都是一个方法。ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue)2、示例代码public class ThreadPoolExecutorSimple { public static void main(String[] args...原创 2019-12-22 16:19:46 · 488 阅读 · 0 评论 -
Java 创建多线程三种方式
1、Java 多线程三种方式1.继承Thread2.实现Runnable3.实现Callable2、继承Threadpublic class ThreadDemo extends Thread { public void run() { System.out.println("线程名称:"+this.getName()+"-----线程Id:"+this.getId(...原创 2019-12-22 16:18:50 · 274 阅读 · 0 评论 -
Java 常见排序算法
1、排序算法冒泡排序鸡尾酒排序选择排序直接插入排序归并排序堆排序快速排序2、示例代码public class Sort { public static void main(String[] args) { int a[] = { 10, 90, 20, 80, 30, 70, 40, 50, 60 }; System.out.println("初始...原创 2019-12-02 11:08:38 · 178 阅读 · 0 评论 -
Java 动态代理
1、动态代理运行时动态地对某些内容代理它做其他的事情。2、接口public interface Saying { public void say(String name); public void talk(String name); }public class SayingImpl implements Saying { public void say(Str...原创 2019-11-07 11:13:42 · 238 阅读 · 0 评论 -
Java四种内部类
1、基本用法1.实现多继承。2.可以将一定类组织在一起同时对外界隐藏。2、成员内部类1.成员内部类依附于外部类存在,创建成员内部类,必须先创建一个外部类对象。2.成员内部类可以定义变量,不允许定义常量和静态属性3.成员内部类可以访问外部类所有成员和方法。3、静态内部类1.静态内部类不需要依附于外部类,不能使用外部类非静态属性和方法,只可以访问静态属性。4、局部内...原创 2019-10-29 18:21:30 · 305 阅读 · 0 评论 -
Java三种反射
1、基本用法1.通过 .class 获取对象。2.通过 getClass() 获取对象。3.通过 Class.forName("") 获取对象。2、示例代码public class Reflex { public static void main(String[] args) throws Exception { Class class_1 = ReflexObjec...原创 2019-10-29 18:20:39 · 312 阅读 · 0 评论 -
Java类加载器-ClassLoader
1、基本用法类加载器负责加载所有的类,为所有被载入内存中的类生成一个java.lang.Class实例对象。2、启动类加载器-Bootstrap加载 JRE\lib\rt.jar3、扩展类加载器-Extension加载 JRE\lib\ext\*.jar4、应用类加载器-AppClassLoader加载 CLASSPATH5、自定义类加载器通过自定义类加载6...原创 2019-10-29 18:20:05 · 250 阅读 · 0 评论 -
Try-Catch-Finally
1、try-catch-finall验证分析1.如果try语句中有return语句,返回当前try中变量此时对应的值,此后对变量做任何修改,不影响try中return的值。2.如果finally语句中有return语句,try或者catch中返回语句忽略。3.如果finally抛出异常,整个try-catch-finall抛出异常。2、使用注意1.尽量在try或者catch中使...原创 2019-10-29 18:18:28 · 302 阅读 · 0 评论 -
Java关键字-Synchronized
1、基本用法修饰实例方法:对拥有这个方法的对象进行对象锁状态检查。修饰静态方法:对拥有这个方法的类对象进行对象锁状态检查(静态方法属于类,不属于当前实例)。修饰代码块:2、示例代码public class SynchronizedKeyword { /** * * 方法描述:修饰实例方法 * */ public synchronized void Fu...原创 2019-10-29 18:16:22 · 248 阅读 · 0 评论 -
Java关键字-Static
1、基本用法静态变量:静态变量在内存中只有一个拷贝,JVM只分配一次内存,可以用类名直接访问。静态方法:不需要创建对象可以直接调用。静态代码块:JVM加载类时会按顺序执行这些静态的代码块。静态内部类:不需要依赖外部类,不能访问外部类非静态属性。静态导包:JDK1.5特性。静态常量:static + final2、示例代码public class Static {...原创 2019-10-29 18:15:39 · 248 阅读 · 0 评论 -
Java关键字-Final
1、基本用法可以修饰类、方法、变量(成员变量和局部变量)。2、类表示此类不能被继承(String.class)。3、方法1.可以把方法锁住,防止任何继承类修改它的含义。2.同意编译器将针对该方法的所以调用都转换为内嵌调用。3.所有private方法隐式地指为final。4、引用类型表示引用的地址是不能改变的。5、基本数据类型对于基本数据类型final使数...原创 2019-10-29 18:13:51 · 249 阅读 · 0 评论 -
Java关键字-Interface
1、基本用法接口是一种约束形式,其中只包括成员定义,不包含成员实现的内容。接口可以声明属性、方法、事件和类型,但不能声明变量,也不能设置这些成员的具体值,也就是说,只能定义,不能给它里面定义的东西赋值。2、示例代码/** * * 接口 * * @version 1.0 */public interface Inteface { /** * * 只能...原创 2019-10-29 18:14:33 · 336 阅读 · 0 评论 -
Java关键字-Abstract
1、基本用法1.abstract关键字修饰的类是抽象类。2.abstract关键字修改的函数是抽象函数。2、抽象类无法构造出实体的类,不能生成对象,通常被继承。抽象类可以包含常量、变量、静态成员、构造方法、方法实现。3、抽象方法无法实现具体代码的函数。4、示例代码/** * * 抽象类 * * @version 1.0 */public abs...原创 2019-10-29 18:12:01 · 277 阅读 · 0 评论 -
if if 与 if else if 区别
1、今天写东西的时候突然想到 if() else if() 两个条件如果都满足会有什么结果,所以做了以下一个测试。2、if ifpublic class Test { public static void main(String[] args) { Integer a = 10; if (a > 5) { System.out.println("1"); }...原创 2018-10-19 16:13:39 · 1784 阅读 · 0 评论 -
Java start() run() 比较分析
start():启动一个新线程,新线程会执行相应的run()方法。不能被重复调用。run():单独调用的话,会在当前线程中执行,并不会启动新线程。必须执行完线程才会开始向下执行。和普通的成员方法一样,可以被重复调用。验证代码github/** * * start()、run() 比较分析 * start():启动一个新线程,新线程会执行相应的run()...原创 2019-08-06 08:25:10 · 408 阅读 · 0 评论 -
Java sleep() wait() 比较分析
sleep():使当前执行的线程休眠(暂时停止执行)指定的毫秒数,线不会丢失任何监视器的所有权。wait():使当前线程等待,直到另一个线程调用notify()或notifyAll()方法。当前线程必须拥有此对象的监视器。线程释放此监视器的所有权并等待另一个线程通知等待此对象监视器唤醒的线程通过调用notify方法或notifyall方法。线程等待,直到它可以重新获得监视器...原创 2019-08-06 08:29:48 · 443 阅读 · 0 评论 -
JVM 调试命令
1、需要注意的重点信息新生代对象增长的速率Young GC的触发频率Young GC的耗时每次Young GC过后有多少对象是存活下载的每次Young GC过后有多少对象进入老年代老年代对象增长的速率Full GC的触发频率Full GC的耗时2、jps显示指定系统内所有的HotSpot虚拟机进程jps可以通过RMI协议查询开启RMI服务的进程虚拟机进程...原创 2019-08-21 17:57:15 · 312 阅读 · 0 评论 -
JVM GC优化思路
JVM的GC一般分为Young GC和Full GC,而Full GC由于STW(stop the world)需要消耗的时间一般情况比Young GC要多很多,所以GC优化思路是尽量减少Full GC的频率,减少STW以提升性能。现在我们知道了JVM优化的方向是减少Full GC的频率,要减少Full GC的频率必然要知道对象是如何进入老年代的。那么我们先考虑几个问题,Young GC、...原创 2019-08-22 10:18:37 · 582 阅读 · 0 评论 -
JVM 模拟Young GC及日志分析
本篇文章主要是模拟一次JVM发生一次Young GC的情况后对日志进行分析,为后面的模拟Full GC做准备。github地址1、JVM的参数设置JDK1.8-XX:InitialHeapSize=10485760 初始化堆大小10M -XX:MaxHeapSize=10485760 最大堆大小10M -XX:NewSize=5242880 初始化新生代大小5M ...原创 2019-08-22 10:22:08 · 684 阅读 · 0 评论 -
JVM 模拟Full GC
本篇文章主要是模拟JVM发生Full GC的情况。github1、JVM的参数设置JVM参数设置(JDK1.8)-XX:InitialHeapSize=20971520 -XX:MaxHeapSize=20971520 -XX:NewSize=10485760 -XX:MaxNewSize=10485760 -XX:SurvivorRatio=8 ...原创 2019-08-22 10:25:31 · 1618 阅读 · 0 评论 -
JVM 模拟对象进入老年代的四种情况
JVM 模拟对象进入老年代的四种情况github1、JVM参数设置JVM参数设置(JDK1.8)-XX:InitialHeapSize=20971520-XX:MaxHeapSize=20971520-XX:NewSize=10485760-XX:MaxNewSize=10485760-XX:SurvivorRatio=8/3-XX:MaxTenuringThreshol...原创 2019-08-22 10:34:25 · 1607 阅读 · 0 评论 -
LinkedHashMap实现LRU算法
LRU算法:最近最少使用,淘汰时间最长未被使用的数据。实现思路:1.创建一个队列,并设置队列的阈值。2.将数据按顺序存放到队列中,新增数据时将数据添加到队列尾部,如果队列超过阈值,则从队列头部删除数据。3.LinkedHashMap可以设置数据的访问顺序,并且在新增元素时可以删除最老的元素,所以可以用来实现LRU算法。/** * * LRU算法:最近最少使用,淘汰时间最...原创 2019-09-23 09:09:00 · 347 阅读 · 0 评论 -
Semaphore 源码学习
1、Semaphore 的作用一种计数信号量。通常用于限制能够访问某系资源的线程数。维护一组许可证,每个 acquire 将获取一个许可证,每个 release 会释放一个许可证。2、核心结构//所有机制通过AbstractQueuedSynchronizer子类实现private final Sync sync;3、构造方法// 默认不考虑公平策略public S...原创 2019-08-16 08:22:48 · 246 阅读 · 0 评论 -
CyclicBarrier 源码学习
1、CyclicBarrier 的作用一种同步辅助,允许一组线程彼此等待到达一个共同的障碍点。cyclicbarrier在包含固定大小的线程的程序中非常有用,这些线程有时必须彼此等待。这个屏障被称为循环,因为它可以在释放等待的线程之后重用。2、核心结构// 使用ReentrantLock加锁private final ReentrantLock lock = new Reentra...原创 2019-08-16 08:23:26 · 239 阅读 · 0 评论 -
CountDownLatch 源码学习
1、CountDownLatch 的作用一种同步辅助,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。一个通用的同步工具,可以用于多种用途。初始化一个count为1的 CountDownLatch 作为一个简单的on/off闩锁或门:所有调用 wait 的线程都在门上等待,直到调用 countDown 的线程打开它。一个初始化为N的 CountDownLatch 可以用来让一个...原创 2019-08-16 08:23:01 · 277 阅读 · 0 评论 -
获取指定年份的工作日和节假日后导入Excel
github地址本文主要是获取指定年份的工作日和节假日后导入Excel1、获取指定年份的所有日期,默认周一到周五是工作日,周六和周日是节假日。2、获取国家法定节假日和对应调休日期。3、修改法定节假日和调休日的日期。4、导入Excelpackage com.date;import java.io.FileNotFoundException;import java....原创 2019-05-31 10:37:56 · 4061 阅读 · 0 评论 -
Java递归获取zTree简单结构数据优化
本文主要是对上一次写的Java递归获取zTree两种树形结构数据 中的第二种 简单数据类型 进行优化。数据结构:var nodes = [ {id:1, pId:0, name: "父节点1"}, {id:11, pId:1, name: "子节点1"}, {id:12, pId:1, name: "子节点2"}];// 获取简单JSON数据public s...原创 2019-05-17 09:44:42 · 1734 阅读 · 0 评论 -
Java死锁Demo
github地址本文主要是模拟死锁和避免死锁的Demo死锁代码public class DeadLockDemo { private static Object resource1 = "资源1"; private static Object resource2 = "资源2"; public static void main(String[] args) { Dead...原创 2019-05-20 10:59:37 · 1811 阅读 · 2 评论 -
Java Integer对象
对于 Integer 在 -128 ~ 127 范围内的赋值,Integer 对象是在 IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用 == 进行判断;但是这个区间之外的所有数据,都会在堆上产生,不会复用已有对象。 public static void main(String[] args) { Integer int_1 = 1...原创 2019-02-13 09:48:39 · 1750 阅读 · 1 评论 -
Java的String创建对象、String比较对象
验证Java的String创建对象以及比较对象 public static void main(String[] args) { String s1 = "abc"; String s2 = "abc"; String s3 = new String("abc"); System.out.println("s1 == s2:-----:" + (s1 == s2)); S...原创 2019-02-12 15:25:14 · 1637 阅读 · 0 评论 -
Java POI 导入Excel时对Excel数据进行格式转换
本文主要内容是使用Java POI对Excel导入时,对Excel的数据形式进行格式转换。下面是代码 Sheet sheet = workbook.getSheetAt(0); int rowCount = sheet.getPhysicalNumberOfRows(); Row row0 = sheet.getRow(0); int cellCount =...原创 2018-10-08 10:23:34 · 3917 阅读 · 0 评论 -
Java递归获取zTree标准结构数据优化
本文主要是对上一次写的Java递归获取zTree两种树形结构数据中的第一种 标准数据类型 进行优化。数据结构:var nodes = [ {name: "父节点1", children: [ {name: "子节点1"}, {name: "子节点2"} ]}]; // 获取标准JSON数据public static List...原创 2018-09-25 15:07:49 · 3114 阅读 · 0 评论 -
Java递归获取zTree两种树形结构数据
1、数据结构id 主键pId 关联Idname 节点名称level 节点级别2、标准数据类型标准的 JSON 数据需要嵌套表示节点的父子包含关系 数据结构: var nodes = [ {name: "父节点1", children: [ {name: "子节点1"}, {name: ...原创 2018-08-30 11:31:49 · 10114 阅读 · 0 评论 -
记录一次性能优化中的问题与方案
本文主要记录工作中的一次性能优化,主要从数据库,Java代码层,以及前端返回数据三个方面进行优化,响应时间从2.2秒左右提升到1.1~1.2秒。1、数据库方面由于数据库中数据量较大并且使用到的表较多,有些数据量较大的查询速度明显增加,而且由于表数量多、基数大,尽管每次查询速度不慢,但还是会增加总体的响应时间。1. 数据的查询顺序数据查询的过程中发现有些查询的结果集很大但是并没有用到...原创 2018-09-04 11:55:47 · 1855 阅读 · 0 评论 -
Java获取项目路径
1、Java后台直接从方法中获取参数HttpServletRequest,获取requestrequest.getScheme():获取协议类型request.getServerName():获取域名request.getServerPort():获取端口号request.getContextPath():获取上下文(项目名)request.getSession().getS...原创 2018-08-24 17:20:59 · 1122 阅读 · 0 评论 -
使用观察者模式发布通知并获取执行结果
github1、观察者public interface Observer { // 声明响应方法 public void update(Observable o, Object obj); }2、被观察者public abstract class Observable { protected List<Observer> observers = new ...原创 2019-06-03 09:54:28 · 1653 阅读 · 0 评论 -
Java创建图片验证码
1、使用Graphics创建图片验证码 // 图形验证码的字符集合,系统将随机从这个字符串中选择一些字符作为验证码 private static String codeChars = "%#0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"; /** * * 方法描述:返回...原创 2019-06-04 13:32:50 · 918 阅读 · 0 评论