
JAVA
ustcyy91
这个作者很懒,什么都没留下…
展开
-
有return情况下的try catch finally执行顺序
结论:1、不管有木有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、finally中最好不...原创 2018-09-10 15:32:47 · 324 阅读 · 0 评论 -
HashMap多线程引起的死循环的原因分析
转载自:https://coolshell.cn/articles/9606.html转载 2017-12-05 21:49:52 · 367 阅读 · 0 评论 -
Java集合————HashMap原理
-----------------------------------------这一个说的也很好:http://www.cnblogs.com/chengxiao/p/6059914.html---------------------------------------HashMap 的实现原理HashMap 概述HashMap 是基于哈希表的 Map 接口的非同步实现。此实现提供所有可选的映射...转载 2017-07-22 20:16:13 · 275 阅读 · 0 评论 -
ConcurrentHashMap实现原理及源码分析
https://www.cnblogs.com/chengxiao/p/6842045.htmlConcurrentHashMap能够线程安全的原理是 实行了分段锁HashTable也能线程安全,但是使用了全锁,极大地影响效率,所以很少用。转载 2017-12-05 22:17:19 · 199 阅读 · 0 评论 -
Java中代码块的执行顺序
结论 这里先把整理好的结论抛给大家,然后我在写个程序来验证我们的结论。在Java类被new的过程中,执行顺序如下: 实现自身的静态属性和静态代码块。(根据代码出现的顺序决定谁先执行) 实现自身的非静态属性和非静态代码块。 执行自身的构造函数。 在实现继承的类被new的过程中,初始化执行顺序如下: 实现父类的公共静态属性和静态块级代码。转载 2017-11-26 21:11:52 · 187 阅读 · 0 评论 -
java——Executor框架
原创 2017-12-14 15:14:59 · 217 阅读 · 0 评论 -
java——线程生命周期waiting状态和blocked状态的区别
waiting:主动为之,wait()方法释放cpu执行权和释放锁 进入等待队列 需要notify()唤醒进入同步队列竞争锁blocked:被动的,在竞争锁的时候失败,被阻塞,在同步队列里继续竞争锁。原创 2017-12-14 17:41:31 · 1596 阅读 · 0 评论 -
Java中keySet()返回值的排序问题
由于对数据进行处理的时候是按照乱序一行一行的处理,导致并行线程各自占据了一部分数据,谁也不肯释放,从而发生死锁。为什么会乱序,是因为取得数据行主键的时候,使用了HashMap.keySet()方法,而这个方法返回的Set结果,里面的数据是乱序排放的。JavaDoc里面没有详细地解释,所以用代码进行了一下尝试import java.sql.Timestamp;import转载 2017-11-27 14:40:10 · 1568 阅读 · 0 评论 -
hashcode和equals为什么都要重写?
1、"==",即全等比较,它判断的是地址是否相等,如果地址相同的话,也就不用比较eqauls了。2、原始的"equals"是和“==”的完全等同,即Object的equals和“=="完全等同。3、java se规范约定,如果重写equals方法,那也要重写hashCode方法,使equals为真的情况,hashCode的值也是相同的,此为约定而非强制。4.对于非hash类型的数据结构,不原创 2017-12-14 22:29:07 · 249 阅读 · 0 评论 -
java——保证原子性操作的CAS算法
看了一堆文章,终于把JAVA CAS的原理深入分析清楚了。感谢GOOGLE强大的搜索,借此挖苦下百度,依靠百度什么都学习不到! 参考文档:http://www.blogjava.net/xylz/archive/2010/07/04/325206.htmlhttp://blog.hesey.net/2011/09/resolve-aba-by-atomics转载 2017-12-14 10:34:47 · 2131 阅读 · 0 评论 -
java——乐观锁和悲观锁
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人转载 2017-12-14 10:24:29 · 433 阅读 · 0 评论 -
java中 创建对象的几种方式
作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字、使用Class类的newInstance方法、使用Constructor类的newInstance方法、使用Clone方法、使用反序列化。使用new关键字:这是我们最常见的也是最简单的创建对象的方式,通过这种方式我们还可以调用任意的转载 2017-12-09 16:18:49 · 252 阅读 · 0 评论 -
Java中 volatile关键字怎么禁止重排序
使用volatile关键字修饰共享变量可以禁止重排序。若用volatile修饰共享变量,在编译时,会在指令序列中插入内存屏障来禁止特定类型的处理器重排序 volatile禁止指令重排序的一些规则: 1.当第二个操作是voaltile写时,无论第一个操作是什么,都不能进行重排序 2.当地一个操作是volatile读时,不管第二个操作是什么,都不能进行重排序 3.当第一个操作是原创 2017-12-11 11:19:33 · 3771 阅读 · 1 评论 -
jdk1.6以后 对synchronized锁做了哪些优化
1.适应自旋锁 自旋锁:为了减少线程状态改变带来的消耗 不停地执行当前线程 2.锁消除: 不可能存在共享数据竞争的锁进行消除3.锁粗化: 将连续的加锁 精简到只加一次锁4.轻量级锁: 无竞争条件下 通过CAS消除同步互斥5.偏向锁:无竞争条件下 消除整个同步互斥,连CAS都不操作。原创 2017-12-19 21:33:25 · 4933 阅读 · 0 评论 -
Java线程池架构原理和源码解析(ThreadPoolExecutor)
在前面介绍JUC的文章中,提到了关于线程池Execotors的创建介绍,在文章:《java之JUC系列-外部Tools》中第一部分有详细的说明,请参阅;文章中其实说明了外部的使用方式,但是没有说内部是如何实现的,为了加深对实现的理解,在使用中可以放心,我们这里将做源码解析以及反馈到原理上,Executors工具可以创建普通的线程池以及schedule调度任务的调度池,其实两者实现上转载 2017-12-11 22:51:20 · 204 阅读 · 0 评论 -
Java NIO原理 图文分析及代码实现
这篇博客我主要从两个方向来分析java NIO目录:一.java NIO 和阻塞I/O的区别 1. 阻塞I/O通信模型 2. java NIO原理及通信模型二.java NIO服务端和客户端代码实现 具体分析: 一.java NIO 和阻塞I/O的区别 1. 阻塞I/O通信模型 假如现在你对阻塞I/O已有了一定了解,我们知道阻转载 2017-12-12 23:06:14 · 264 阅读 · 0 评论 -
为什么增大HashMap容器类里的加载因子 会增加查询数据的时间开销
我新建一个HashMap,初始容量为16。我存入一个对象,则会先取其hashcode,然后在把hashcode经过某种indexFor运算,得出0-15之间的一个数字。例如我存入Object1 存到下标0;存入Object2 存到下标7;存入Object3 存到下标4;存入Object4 恰好也是7,怎么办呢,发生了碰撞?Hashmap的做法是把Object2和4组成一个链表,然后在放在下标7的位转载 2017-12-04 21:27:07 · 426 阅读 · 0 评论 -
JAVA——动态代理
package test;public interface Jisuan { int add(int a,int b); int mul(int a,int b);}package test;public class JisuanImp implements Jisuan{ @Override public int add(int a, int b) { // T原创 2017-12-21 22:23:24 · 189 阅读 · 0 评论 -
AOP的底层实现-CGLIB动态代理和JDK动态代理
cglib的实现原理 :在内存为目标对象创建一个子类对象,通过覆写父类的方法 ,实现功能增强。AOP是目前Spring框架中的核心之一,在应用中具有非常重要的作用,也是Spring其他组件的基础。它是一种面向切面编程的思想。关于AOP的基础知识,相信多数童鞋都已经了如指掌,我们就略过这部分,来讲解下AOP的核心功能的底层实现机制:如何用动态代理来实现切面拦截。转载 2017-12-22 11:29:32 · 209 阅读 · 0 评论 -
线程间通信——wait notify
--------------------------------------划重点1.要在synchronized内写代码2.锁对象应该是共享的对象3.wait要写在while循环里// The standard idiom for calling the wait method in Java synchronized(shar转载 2017-12-24 15:21:07 · 264 阅读 · 0 评论 -
java并发——CopyOnWrite
聊聊并发-Java中的Copy-On-Write容器Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是Cop转载 2017-12-24 16:57:09 · 278 阅读 · 0 评论 -
JAVA-枚举类
转载自:https://blog.youkuaiyun.com/qq_31655965/article/details/55049192为什么要引入枚举类一个小案例你写了一个小程序,不过好久不用了,突然有一天,你想使用一下它。程序要想正确运行,需要将今天星期几存到数据库里。这个时候,你开始犯难了。当初的你还很年轻,不懂程序界的险恶,设计这个程序的时候,傻不拉几把这个字段设计为int类型的,用0...转载 2018-08-09 20:27:40 · 1681 阅读 · 1 评论 -
Class.forName和classloader的区别
总结:Class.forName()执行初始化过程 执行静态代码化。 ClassLoader.loadClass不执行初始化过程。一 Java类装载过程装载:通过累的全限定名获取二进制字节流,将二进制字节流转换成方法区中的运行时数据结构,在内存中生成Java.lang.class对象; 链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的...转载 2018-08-07 15:27:20 · 2531 阅读 · 0 评论 -
ThreadLocal的总结
作者:大闲人柴毛毛链接:https://zhuanlan.zhihu.com/p/34494674来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 ThreadLocal作用在并发编程中时常有这样一种需求:每条线程都需要存取一个同名变量,但每条线程中该变量的值均不相同。如果是你,该如何实现上述功能?常规的思路如下:使用一个线程共享的Map<...转载 2018-08-27 17:28:50 · 339 阅读 · 0 评论 -
JAVA--线程面试TOP50题
原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited。欢迎加入Java小组。转载请参见文章末尾的要求。 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚...转载 2018-08-27 17:38:50 · 228 阅读 · 0 评论 -
JAVA内存泄漏的几种情况
Java内存泄漏引起的原因: 内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏。 长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏,尽管短生命周期对象已经不再需要,但是因为长生命周期持有它的引用而导致不能被回收,这就是Java中内存泄漏的发生场景。 造成内存泄漏的几种情况:1、静态集合类引起内存...转载 2018-08-23 21:30:57 · 394 阅读 · 0 评论 -
Java 里如何实现线程间通信
Java 里如何实现线程间通信 原文出处: wingjayhttp://www.importnew.com/26850.html正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。本文涉及到的知识点:thread.join(), object.wait(), object.notify(), ...转载 2018-08-28 15:25:09 · 252 阅读 · 0 评论 -
线程池拒绝策略RejectedExecutionHandler
JAVA为多线程场景提供了线程池,下面是一个线程池的构造方法: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQue...转载 2018-08-28 17:22:24 · 569 阅读 · 0 评论 -
IntelliJ IDEA上创建maven Spring MVC项目
转载自:http://www.cnblogs.com/Sinte-Beuve/p/5730553.htmlIntelliJ IDEA上创建Maven Spring MVC项目各软件版本 利用maven骨架建立一个webapp 建立相应的目录 配置Maven和SpringMVC 配置Maven的pom.xml 配置web.xml 配置contextConfigLocation...转载 2018-09-05 23:58:33 · 391 阅读 · 0 评论 -
java split函数的用法
在java.lang包中也有String.split()方法,与.net的类似,都是返回是一个字符型数组,但使用过程中还有一些小技巧。如执行:"2|33|4".split("|")出来的结果是:""2|33|4奇怪吧,不过注意看一下API说明还是知道原因的. java.lang.string.split split 方法 将一个字符串分割为子字符串,然后将结果作为字符串数组返回。 stringOb...转载 2018-06-30 20:21:37 · 271 阅读 · 0 评论 -
Linux环境下安装配置java环境
转载自:https://www.cnblogs.com/xuliangxing/p/7066913.html本文主要介绍的是如何是Linux环境下安装JDK的,因为Linux环境下,很多时候也离不开Java的,下面笔者就和大家一起分享如何jdk1.8的过程吧。一、安装环境操作系统:Red Hat Enterprise Linux 6 64 位(版本号6.6)JDK版转载 2018-04-28 22:19:43 · 199 阅读 · 0 评论 -
Java并发编程------volatile关键字
Java并发编程:volatile关键字解析请参见这个链接:http://www.importnew.com/18126.html要点:并发编程中的三个概念1.原子性:要做就一次做完 要么就别做2.可见性:可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。3.有序性:即程序执行的顺序按照代码的先后顺转载 2017-12-07 15:25:19 · 350 阅读 · 0 评论 -
java——Date类以及常用转换
public class test { public static void main(String[] args) throws ParseException { //1.获取当前时间的date对象 Date date=new Date(); System.out.println(date); //2.获取毫秒数 long time=System.currentTime原创 2017-12-25 16:32:42 · 200 阅读 · 0 评论 -
Java Date类型和mysql中 Datetime类型的转换
//将java中的date转换成毫秒 并传入Timestamp构造函数里 返回timestamp Timestamp timestamp=new Timestamp(date.getTime());//插入数据psta2.setTimestamp(12,timestamp);之前都是用string格式存储时间(date)类型,相应的在数据库选择varchar格式转载 2017-12-25 17:20:51 · 9489 阅读 · 0 评论 -
Java——hashCode
Java 的hashCode值计算Java的HashCode的源码:Scala的HashCode的源码:scala调用的也是String这个类:测试代码:[java] view plain copypackage hash; public class HashRandom { public static void main(String[] args) { Str...转载 2018-03-15 14:46:42 · 213 阅读 · 0 评论 -
Java内存分配与管理与String详解
Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域:◆寄存器:我们在程序中无法控制◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中(new 出来的对象)◆堆:存放用new产生转载 2018-03-16 10:57:52 · 189 阅读 · 0 评论 -
Lock与synchronized 的区别
结论:Lock锁比较灵活,是显示的。可以自由控制,可以中断Synchronized 是隐式的 不可中断,在并发量小的情况下还行 并发量高的情况下 Lock效率更高。1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候 线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放原创 2018-03-16 16:43:20 · 179 阅读 · 0 评论 -
Java匿名内部类访问外部变量,为何需被标志为final?
对于Java语言中的final使用,大家应该很熟悉,可以修饰类,表示不可继承;可以修饰方法,表示不可被子类重写;可以修饰变量,表示不可以被二次赋值。那么,Java匿名内部类访问外部变量,为何需被标志为final?这跟上述三个特性有关系吗?一、问题的提出Java编程中,使用匿名内部类访问外部方法的局部变量是一件很常见的事件,比如以下代码,使用匿名内部类设置控件的监听器是再常见不过了,下面转载 2018-04-18 16:24:10 · 274 阅读 · 0 评论 -
java 字节数组与int类型互相转换
public class test { public static void main(String[] args) throws ParseException { int i=-6123; System.out.println(bytes2int(int2byteArray(i))); } public static byte[] int2byteArray(int i){原创 2018-05-01 10:46:39 · 2838 阅读 · 0 评论 -
java static关键字
原创 2017-11-30 16:09:00 · 166 阅读 · 0 评论