
Java
罗罗诺亚F
尼卡
展开
-
SimpleDateFormat的线程安全问题及解决办法
SimpleDateFormat的线程安全问题及解决办法原创 2022-05-04 00:00:26 · 764 阅读 · 0 评论 -
JDBC实现的服务提供者框架
1.框架介绍服务提供者框架是指这样一个系统:多个服务提供者实现一个服务,系统为服务提供者的客服端提供多个实现,并把他们从多个实现中解耦出来。服务框架中有四个组件:服务接口:用来提供者实现的提供者注册API:系统用来注册实现,让客服端访问它们服务访问API:客户端用来获取服务的实例服务提供者接口(可选):负责创建其服务实现的实例2.JDBC的实现JDBC连接数据库重要的两步就是加...原创 2020-03-01 18:57:03 · 688 阅读 · 0 评论 -
wait、sleep、notify、notifyAll方法总结
wait和sleep方法区别wait方法位于Object类中,sleep方法位于Thread类中 在调用wait方法时,线程必须持有被调用对象的锁,当调用wait方法后,线程就会释放掉该对象的锁(monitor);sleep方法不会释放对象锁 wait方法需要在同步方法或者代码块中执行,sleep没有限制 wait方法执行后唤醒需要等待其他线程调用对象的notify或者notifyAll...原创 2019-11-23 23:30:56 · 484 阅读 · 0 评论 -
Java8 接口默认方法
Java8接口中可以定义默认实现的方法,该方法只能有一个,该接口实现类必须实现抽象方法getAge,可以选择保留默认方法getName,或者重写它。public interface Person { int getAge(); default String getName(){ return "person"; }}如果接口中定义的默认方法,和另外一个父类或原创 2017-06-27 22:06:18 · 588 阅读 · 0 评论 -
Java8 Optional类
Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在, 原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念。并且 可以避免空指针异常。常用方法如下:Optional.of(T t) : 创建一个非null的值创建一个Optional 实例,创建对象时传入的参数不能为null。如果传入参数为null,则抛出NullP原创 2017-07-16 21:18:29 · 516 阅读 · 0 评论 -
Java8 方法引用和构造器引用
一、方法引用:有时候你想传递的方法已经有了实现的方法时,就可以使用方法引用,我们可以可以将方法引用理解为 Lambda 表达式的另外一种表现形式.对象的引用 :: 实例方法名PrintStream ps = System.out;Consumer<String> con = (str) -> ps.println(str);con.accept("Hello World!");Consum原创 2017-07-16 21:45:22 · 890 阅读 · 0 评论 -
Java8 lambda表达式
一、为什么使用lambda表达式 Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。 例:对list对象进行排序,之前需要创建Comparator的匿名类,进行重写方法设置比较条件,现在用lambda表达式则将执行的代码块传进去,代码如下:原创 2017-07-08 22:02:21 · 314 阅读 · 0 评论 -
java.lang.UnsupportedOperationException解决方法
在项目中对List进行操作时报错java.lang.UnsupportedOperationException,后来发现操作的List是由数组转换而成的,通过看源码发现问题,并写测试程序如下。 代码块:public class ListTest { public static void main(String[] args) { String[] array = {"1",原创 2017-08-26 08:57:36 · 131875 阅读 · 15 评论 -
Guava Immutable和JDK Collections.unmodifiableXXX不可变集合比较
一、不可变对象有很多优点,包括: 1)当对象被不可信的库调用时,不可变形式是安全的; 2)不可变对象被多个线程调用时,不存在竞态条件问题 3)不可变集合不需要考虑变化,因此可以节省时间和空间。所有不可变的集合都比它们的可变形式有更好的内存利用率(分析和测试细节); 4)不可变对象因为有固定不变,可以作为常量来安全使用。 二、JDK Collections.unmodifiableList原创 2017-09-17 18:53:15 · 701 阅读 · 0 评论 -
String split 对空字符的处理
开发时做字符串分割为数组时遇到这样的问题,分割符后是空串,没有作为元素存到数组中,如下:String name = "a,b,c,r,,,,";String[] names1 = name.split(",");期待得到的数组长度是8,结果得到的长度是4,因为结尾的空字符串都被丢弃了。后来查到该方法还有一个重载,split(String regex, int limit) 可以解决...原创 2019-01-12 15:55:24 · 1695 阅读 · 0 评论 -
BigDecimal比较大小equals和compareTo方法
比较BigDecimal大小有两种方法equals和compareTo,如下:public class BigdecimalTest { public static void main(String[] args) { BigDecimal z1 = new BigDecimal("0"); BigDecimal z2 = new BigDecimal("0.0原创 2017-07-04 10:00:44 · 6724 阅读 · 0 评论 -
Java 8 LocalDate和LocatTime使用
Java 8引入了一套全新的时间日期API,操作起来更简便。简单介绍下,LocalDate和LocatTime的使用; java.util.Date月份从0开始,java.time.LocalDate月份从1开始并且提供了枚举。 java.util.Date和SimpleDateFormatter都不是线程安全的,而LocalDate和LocalTime和最基本的String一样,是不变类型,不原创 2017-06-11 10:34:57 · 5198 阅读 · 0 评论 -
String 、StringBuffer、与StringBuilder之间的区别
String和StringBuffer的区别: java中两个类String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。String类表示内容不可改变的字符串。经常会写需要直接写出一个字符串变量,也就是双引号包括的字符数据,而字符串类具有一定的原创 2012-10-18 20:55:13 · 605 阅读 · 0 评论 -
request.getAttribute 和 request.getParameter的异同
(A)前者返回Object类型的对象,后者返回String类型的对象(B)request.getAttribute()和reuqest.setAttribute()方法是相对应的(C)当两个Web组件之间为转发关系时,转发目标组件通过getAttribute()方法来转发源组件共享request范围内的数据(D)当两个Web组件之间为链接关系时,被链接的组件通过getParameter原创 2012-10-25 22:33:02 · 593 阅读 · 0 评论 -
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building f
这么说吧,这个问题真是日了狗了,整了两天才在大家的帮助下解决,虽然深层次的原理还不是很理解,也许不是对所有的这个情况都有用,但是解决方法还是要粘出来希望对其他人有所帮助。问题描述:首先我有一个webservice既做服务端又做客户端,主要用作接收外部系统的请求,然后请求第三方接口,并把结果处理完成推送给请求方。我自己用客户端模拟发送请求,webservice没有任何问题正常请求第三方接口并返回数据,原创 2016-09-08 16:13:02 · 16978 阅读 · 0 评论 -
Thread.currentThread().getName() 和 this.getName()区别详解
最近在看java多线程编程核心技术这本书,由于一直对于线程的应用和学习不深,在例子中碰到Thread.currentThread().getName() 和 this.getName()的问题很困惑,刚弄懂分享下,有不对的地方还请多多指教。public class MyThread extends Thread { public MyThread(){ System.out.原创 2017-01-09 14:25:23 · 3332 阅读 · 4 评论 -
Java中的装箱和拆箱
面试过程中遇到的一道题:public class CompareInteger { public static void main(String[] args) { Integer i1 = 5; Integer i2 = 5; Integer i3 = 500; Integer i4 = 500; System原创 2017-02-22 09:53:35 · 515 阅读 · 0 评论 -
Java线程循环顺序执行
遇到一个面试题需要3个线程顺序执行,并循环10次,代码如下:public class MyThread extends Thread { private Object lock; private String showChar; private int showNumPosition; private int printCount = 0; volatile pri原创 2017-02-15 16:56:20 · 6446 阅读 · 0 评论 -
List中删除元素remove和removeAll
public class ListTest { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); list.a原创 2017-03-09 10:07:37 · 13421 阅读 · 2 评论 -
Java只读集合实例
由于业务逻辑需要创建只读的Map和List只能在初始化的时候进行赋值,除此之外只能读取不能修改或者添加数据,如果执行添加和修改操作则抛出异常,在网上找到如下代码片段可满足需求。import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.HashMap;impo原创 2017-05-08 22:51:03 · 2885 阅读 · 0 评论 -
Java中对象的引用级别
Java中提供了4个级别的引用:强引用、软引用、弱引用和虚引用。 1、强引用 通过引用,可以对堆中的对象进行操作。在某函数中,当创建了一个对象,该对象被分配在堆中,通过这个对象的引用才能对这个对象进行操作。 强引用可以直接访问目标对象; 强引用所指向的对象在任何时候都不会被系统回收,JVM宁愿抛出OOM异常,也不回收强引用所指向的对象; 强引用可能导致内存泄漏。 2、软引用 可以通过S原创 2017-05-10 00:12:45 · 989 阅读 · 0 评论 -
==和equals方法究竟有什么
这个问题我一直很困惑,今天找到一些解释,整理出来和大家分享一下。 “==”操作符是专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存。例如:Objet obj转载 2012-10-16 22:02:48 · 493 阅读 · 0 评论