![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA SE
半笙彷徨
追求自我,超越自我
展开
-
java Timer(定时调用、实现固定时间执行)
最近需要用到定时调用的功能。可以通过java的Timer类来进行定时调用,下面是有关Timer的一些相关知识。其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来实现,例如这样:Timer timer = new Timer();timer.schedule(new TimerTask() { public void run() { System.out.println("11232转载 2021-08-15 20:57:39 · 3172 阅读 · 0 评论 -
Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
一、线程的状态Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态)。New:新建状态,当线程创建完成时为新建状态,即new Thread(…),还没有调用start方法时,线程处于新建状态。Runnable:就绪状态,当调用线程的的start方法后,线程进入就绪状态,等待CPU资源。处于就绪状态的线程由Java运行时系统的线程调度程序(thread scheduler)来调度。Running:运转载 2021-08-14 23:46:54 · 135 阅读 · 0 评论 -
JAVA-private修饰的方法可以通过反射访问,那么private的意义是什么
private的意义是什么?private并不是解决安全问题的,如果想让解决代码的安全问题,请用别的办法private的意义是面向对象编程的封装概念而对于setAccessible()方法会破坏类的访问规则,产生安全隐患。知乎上面看到的一篇回答貌似很有道理:...转载 2021-08-05 22:40:37 · 190 阅读 · 0 评论 -
JAVA-关于线程stop方法过期
stop方法是不安全的。 停止线程会使它解锁它已锁定的所有监视器。建议的结束线程的两种方式:1.通过标识控制线程是否运行;public class ThreadSafe extends Thread { public volatile boolean exit = false; public void run() { while (!exit){...原创 2020-04-06 22:43:15 · 544 阅读 · 0 评论 -
JAVA-SimpleDateFormat线程安全问题
SimpleDateFormat是用来格式化日期的类,在单线程下使用没问题,但是在多线程场景下,如果多个线程使用的是同个实例,则可能出现时间出错,线程挂死问题。原因是format中使用了父类中的的calendar变量,其是一个共享变量,前后修改值在多线程情况下会出问题。解决方法:1.每个线程都使用一个新的实例;2.使用ThreadLocal保存SimpleDateFormat实例;pac...原创 2020-04-05 22:30:40 · 329 阅读 · 0 评论 -
JAVA-Gson-格式化输出json字符串
使用Gson格式化输出json字符串 POM <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version&原创 2018-08-19 14:36:53 · 13429 阅读 · 1 评论 -
JAVA-计算集合数值之和的各种方式
使用JAVA8中的Stream计算集合数值之和的各种方式:import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.LongAdder;import java.util.stream.Collectors;/** * @author wzx * @time 2018/...原创 2018-09-15 18:09:50 · 10896 阅读 · 0 评论 -
JAVA-使用gson校验字符串是否是json
使用gson校验字符串是否是json格式: public static boolean validate(String jsonStr) { JsonElement jsonElement; try { jsonElement = new JsonParser().parse(jsonStr); } catch (Ex...原创 2018-09-20 19:04:19 · 9454 阅读 · 0 评论 -
OkHttp3-设置代理和设置cookie管理
在实践中,因为所有访问接口,但接口有频率限制,次数太多或频率太快,接口就会返回错误,常见错误有429(请求太多),或503(服务不可用)。为解决这个问题,采用多线程方式,然后为每个线程分配代理ip。http请求采用okhttp:依赖:compile group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.11.0'//集成管理C...原创 2018-09-27 16:39:23 · 20998 阅读 · 0 评论 -
Java-使用easyexcel读大文件
使用easyexcel读大excel文件,避免OOM错误。依赖:compile group: 'com.alibaba', name: 'easyexcel', version: '1.0.4'代码:package com.tsaoko.sched.service.task;import com.alibaba.excel.ExcelReader;import com.alibab...原创 2018-09-28 17:34:48 · 8570 阅读 · 4 评论 -
Java-读取大文本文件
介绍读取大文本文件的两种方式,避免堆内存溢出。1.生成测试文件package com.example.demo;import org.apache.commons.io.IOUtils;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.Rando...原创 2018-10-08 18:51:21 · 4556 阅读 · 0 评论 -
Java-读写CSV文件
使用Apache的commons-csv包读写CSV文件,非常方便。pom依赖<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.6</version>&am原创 2018-10-09 12:05:34 · 1730 阅读 · 0 评论 -
Java-删除字符串中的换行符号
删除字符串中的换行符号的几种方式:1.使用String的replaceAll()方法;2.使用google guava的CharMatcher.breakingWhitespace();3.使用Apache Commons包的StringUtils.chomp();方法;pom依赖<dependency> <groupId>com.google.guava<...原创 2018-10-09 14:09:51 · 8763 阅读 · 0 评论 -
Java-ArrayList-subList()方法不恰当使用引起的OutOfMemoryError
先看看代码,逻辑很简单:1.创建了一个ArrayList,然后往这个list里面放了一些数据,得到了一个size=100000的list;2. 从这个list取出一个size=1的sublist;3.将sublist保存到内存中;4.原有的list数据被抛弃;代码:package com.tsaoko.sched.service.task;import java.util.Arra...原创 2018-10-17 12:05:57 · 2473 阅读 · 0 评论 -
Java-compare()方法使用减法导致结果不正确
实现比较功能,可以实现Comparator接口,实现其compare方法,通常直接通过减法来比较new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1-o2; }};当数值都未正数,比较结果没问题,但是,如果当...原创 2018-10-17 14:20:10 · 1021 阅读 · 0 评论 -
Java-实现可监控线程池
目标:创建线程池和一个监控线程,监控线程持有线程池引用,接着定时打印线程池相关信息,使用springboot创建demo。创建线程池接口:/** * 通过设置的参数创建线程池 * Created by wzx on 22/03/2019 */public interface ITestThreadPoolExecutorService { ThreadPoolExecutor...原创 2019-03-28 00:04:13 · 4828 阅读 · 0 评论 -
StringUtils-leftPad、rightPad、center填充方法
package com.qh.health.service;import org.apache.commons.lang3.StringUtils;/** * @author wzx * @since 2019-04-29 */public class StringTest { public static void main(String[] args) { ...原创 2019-05-08 15:39:12 · 2301 阅读 · 0 评论 -
JAVA-简单树形结构
package com.qh.health.service;import com.alibaba.fastjson.JSON;import com.google.common.collect.Lists;import com.google.common.collect.Maps;import lombok.Data;import java.util.List;import java...原创 2019-05-07 18:02:19 · 629 阅读 · 0 评论 -
JAVA-删除html标签
import java.io.*;public class Html2TextWithRegExp { private Html2TextWithRegExp() {} public static void main (String[] args) throws Exception{ StringBuilder sb = new StringBuilder(); ...原创 2019-05-29 17:24:57 · 946 阅读 · 0 评论 -
Apache-POI-设置单元格背景色
Apache-POI-设置单元格背景色版本:3.14XSSFCell mobileCell = row.getCell(0);XSSFCellStyle cellStyle = wb.createCellStyle();cellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());cellStyle.setFillPatte...原创 2019-06-03 13:37:45 · 1447 阅读 · 0 评论 -
Java线程interrupt方法使用要注意的问题
在项目中有这样的业务场景:调度中心终止客户端正在执行的任务。实质是一个线程终止另一个线程。我的做法是在主线程调用另外一个线程的interrupt方法,被终止的线程在一个循环中处理业务逻辑,由于使用interrupt方法并不会马上终止,所以在每次循环开始前判断线程终止状态,如:但是发现Thread.currentThread().isInterrupted()一直返回false,查找资料才知道,被终止原创 2017-02-26 14:56:21 · 2000 阅读 · 1 评论 -
JAVA-Apache-POI-java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell
使用Apache-POI读取excel文件时,如果获取数据的方法与实际类型不符,会抛出IllegalStateException错误,如下:Exception in thread "main" java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell at org.apache.poi....原创 2018-08-19 14:23:46 · 23790 阅读 · 8 评论 -
JAVA-POI-读取excel文件
使用Apache POI读取excel文件,兼容.xlsx和.xls POM<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version>&am原创 2018-08-19 14:18:48 · 557 阅读 · 0 评论 -
Java SE Integer类内置方法浅析
Java 中Integer是int的派生类型,内置了一些常用的对int类型数据的处理方法 下面对其简单的分析。1, String toBinaryString(int i) 给定一个int类型数据,返回这个数据的二进制字符串。 示例:int x=1; int y=2; int z=3; System.out.println(x+"的二进制表示为:"+Integer.转载 2018-02-02 17:13:20 · 209 阅读 · 0 评论 -
Java JUC之Atomic系列12大类实例讲解和原理分解
在java6以后我们不但接触到了Lock相关的锁,也接触到了很多更加乐观的原子修改操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,以及并发中的ABA问题,本文讲述Atomic系列的类的实现以及使用方法,其中包含:基本类:AtomicInteger、AtomicLong、AtomicBoolean;引用类型:AtomicReference转载 2018-02-01 17:45:42 · 188 阅读 · 0 评论 -
Java之BigDecimal类使用
BigDecimal是java.math包中提供数值准确运算的类,提供了加减乘除等常用操作,其中,需要注意的是divide方法的使用,稍一不慎可能会出现错误。divide方法有6种实现,下面分别来看divide(BigDecimal divisor) :直接整除divisor,如果结果是无限循环小数,会抛出异常java.lang.ArithmeticException: Non-terminatin原创 2017-04-02 23:18:05 · 455 阅读 · 0 评论 -
Java如何给压缩文件设置密码
使用Java压缩文件,有时会遇到给压缩文件设置密码的需求,可以使用开源库Zip4j 来完成此功能,它采用纯java实现,使用方便,来看看如何使用。Maven依赖<!-- https://mvnrepository.com/artifact/net.lingala.zip4j/zip4j --><dependency> <groupId>net.lingala.zip4j</groupId>原创 2017-03-12 14:58:42 · 14065 阅读 · 9 评论 -
Java之Integer内部缓存
在Java中,每次创建对象都要进行内存分配操作,为了减少频繁地创建对象,许多地方采用池来存放对象,如String中的字符串池,对于基本类型,对应的包装类中皆有缓存来避免频繁创建对象,如Integer。 Integer中的静态内部类IntegerCache源码:private static class IntegerCache { static final int low = -12原创 2017-03-12 14:39:13 · 1850 阅读 · 0 评论 -
JAVA金额格式字符串转数值
项目中有时会遇到对金额格式的数值如“1,234.34567”进行计算,直接使用Double.parseDouble(“1,234.34567”)会抛出NumberFormatException异常, 那么,有没好的方法解析金额格式的数值? jdk中提供了NumberFormat支持,它的format方法可以将数值转成金额格式字符串,parse方法能解析金额格式的字符串,如下:NumberForma原创 2017-03-11 14:55:55 · 4458 阅读 · 0 评论 -
整理HttpClient4.5的Fluent API的用法
这是接着上一篇对HttpClient4.5的使用总结,HttpClient真是一个好东西,一直保持更新,还推出流畅的写法,使得代码更加简洁易懂,非常好用。HttpClient Tutorial: https://hc.apache.org/httpcomponents-client-4.5.x/tutorial/html/index.html这篇blog介绍的是Fluent API的用法,我把原创 2017-01-20 15:38:25 · 12114 阅读 · 0 评论 -
学习整理HttpClient4.5成http访问服务类
在项目中经常有访问http的需要,HttpClient是一个Apache下一个传统又实用的http工具包,看了介绍,么个版本变化挺大,网上资料也好多是3.X版本,如下是我整理的对4.5.2版本的封装,提供了get和post方法的简便实用,这里使用的方法比较传统,下篇再介绍使用Fluent API封装get和post方法,代码将是简洁流畅,。HttpClient官网: https://hc.apa原创 2017-01-20 12:31:15 · 1136 阅读 · 0 评论 -
导入Fiddler的证书到Java中的cacerts证书库
有时需要使用Fiddler来监控http请求,但是http请求需要证书,要让Fiddler来监控http请求,在Java代码中需要设置代理,设置后如果没有添加Fiddler的FiddlerRoot.cer到Java的cacerts证书库,将会抛出如下异常 :javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorExc原创 2017-01-19 18:00:01 · 3730 阅读 · 1 评论 -
JAVA切换jdk
一个快速切换jdk的小工具 参考资料 https://blogs.oracle.com/pranav/entry/switch_between_different_jdk_v http://mihosoft.eu/?p=649原创 2017-01-09 18:28:26 · 446 阅读 · 0 评论 -
SimpleDateFormat格式化“2016-12-15T00:46:28+08:00”
需求:把“2016-12-15T00:46:28+08:00”字符串转成java中的Date,刚开始使用jdk内置的SimpleDateFormat来实现:SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddTHH:mm:ssz");String publishDate = "2017-01-05T09:02:11+08:00";sdf.原创 2017-01-05 18:35:29 · 8817 阅读 · 0 评论 -
Map之key和value排序
按照value排序,一般排序按照key的话,一般key都是Integer和String,用TreeMap就可以了,另外中方式是把Map按照Map.Entry取出来,放到List里面,然后借助Collectins的sort进行排序。 代码:/** * @author wzx * @time 2018/2/9 */public class MapSortTest { publ...原创 2018-02-09 10:46:11 · 743 阅读 · 0 评论 -
Semaphore并发实战题
需求:实现一个流控程序。控制客户端每秒调用某个远程服务不超过N次,客户端是会多线程并发调用。 代码:/** * @author wzx * @time 2018/2/9 */public class RateLimiterTest { final static int MAX_QPS = 10; final static Semaphore semaphore =...转载 2018-02-09 12:22:04 · 167 阅读 · 0 评论 -
JAVA-Stream-List转换Map
使用Java8的Stream Api,将List转换成Map非常方便。/** * @author wzx * @time 2018/8/4 */public class ListToMapTest { public static void main(String[] args) { List<Person> persons = new Arra...原创 2018-08-04 14:57:10 · 5699 阅读 · 0 评论 -
JAVA-替换字符串非数字字符
JAVA中替换字符串里的非数字字符,最简单的方法,使用正则表达式:/** * @author wzx * @time 2018/8/4 */public class StringNumberFilterTest { public static void main(String[] args) { String s = "wang...test4.jpg".r...原创 2018-08-04 11:51:07 · 10654 阅读 · 0 评论 -
JAVA-根据文件名排序
JAVA中对文件名进行排序/** * @author wzx * @time 2018/8/4 */public class FileSortTest { public static final String PATH = "D:\\tmp\\"; public static void main(String[] args) { List<...原创 2018-08-04 11:46:22 · 8698 阅读 · 5 评论 -
Java-ThreadContextLoader(线程上线文类加载器)
前言此前我对线程上下文类加载器(ThreadContextLoader)的理解仅仅局限于下面这段话:Java 提供了很多服务提供者接口(Service Provider Interface,SPI),允许第三方为这些接口提供实现。常见的 SPI 有 JDBC、JCE、JNDI、JAXP 和 JBI 等。这些 SPI 的接口由 Java 核心库来提供,而这些 SPI 的实现代码则是作为 ...转载 2018-06-19 23:19:55 · 2242 阅读 · 1 评论