javaSE
文章平均质量分 72
iteye_19269
这个作者很懒,什么都没留下…
展开
-
concurrent并发包学习
有一些辅助类真的不错:1、CountDownLatch:等待其他几个(初始化值)任务执行完毕之后才能执行public class Test { public static void main(String[] args) { final CountDownLatch latch = new CountDownLatch(2); ...原创 2016-10-28 16:43:06 · 129 阅读 · 0 评论 -
java热加载解读
首先来学习一下Instrumentation,从java5开始,就可以使用public static void premain(String agentArgs);在类加载前做一些操作。而从java6开始,支持动态修改虚拟机中加载的class,但仅限于方法内部元素改变。但这也大大方便了生产环境JVM运行状态下更新与修复bug等。另外,java6之后对本地方法处理,不过比较少用。...2017-04-26 21:05:41 · 129 阅读 · 0 评论 -
java锁的概念
排它锁和共享锁:synchronized、ReentrantLock属于排它锁,ReentrantReadWriteLock写锁也是排它的,共享锁(ReentrantReadWriteLock的读锁)。可重入锁:比如一个对象中,有方法1和方法2被synchronized修饰,方法1内部可调用方法2,就叫作可重入。另外,ReentrantLock也可以。原理:比如ReentrantLock,...原创 2017-04-03 17:42:03 · 98 阅读 · 0 评论 -
java四种引用
1、强引用:诸如Object a = new Object();如果在一个方法体内,只要方法没结束,这个对象就不会被回收。2、软引用:在将要抛出Out of memory之前首先会回收已经无引用、不可达的对象。3、弱引用:在GC时,就会回收已经无引用、不可达的对象。4、虚引用:任何时候可能被回收,好像一般用来跟踪对象回收之类的,用的少。需要注意的是,后面三种引用类都继承了Refe...原创 2017-03-10 15:44:43 · 86 阅读 · 0 评论 -
CopyOnWriteArrayList使用
用到CopyOnWriteArrayList,使用时,主要有两个问题:1)用Collections.sort()排序报错: Caused by: java.lang.UnsupportedOperationException at java.util.concurrent.CopyOnWriteArrayList$COWIterator.set(CopyOnWrit...2017-03-02 17:57:32 · 583 阅读 · 0 评论 -
线程池汇总2
上篇(线程池汇总1):http://1181731633.iteye.com/admin/blogs/2342551线程池的源码实现:一、线程池基类ThreadPoolExecutor:1)看下其成员变量: private final BlockingQueue<Runnable> workQueue;//任务队列,工作线程从这里拿任务执行 ...2017-02-22 11:42:39 · 98 阅读 · 0 评论 -
中止线程
1. 使用退出标志,使线程正常退出,也就是使run方法完成后线程终止。2. 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。3. 使用interrupt方法中断线程。其中第三种方法又分为:(1)线程处于阻塞状态,如使用了sleep方法。(2)使用while(!isInterrupted())...原创 2017-02-20 21:41:07 · 125 阅读 · 0 评论 -
String和char的源码
String:源码如下,由一个char的数组组成。1、该对象是放在常量池的,2、对象内容不可变(不是绝对,通过反射可以修改),所有的修改内容操作,,都是new一个新的String对象返回。3、Sting s = "hello";字符串放到常量池,太多放不下的时候就GC那些没有引用的。因为等价于String s = new String("hello").intern();(这个说法...原创 2017-02-10 00:08:28 · 219 阅读 · 0 评论 -
实现线程3种方式
1、继承Thread实现。2、实现Runnable接口。3、实现Callable接口,用FutureTask接收返回值。总结:其实线程最核心的是Runnable,因为Thread和FutureTask都继承该接口来实现具体功能,即拓展实现。而Thread实现的start0()方法,其调用本地方法开启新线程。 看第三种:1)其中FutureTask继承了Runnable接口...2017-02-08 11:18:18 · 108 阅读 · 0 评论 -
浅谈泛型
泛型的应用很广泛,其实最简单的,基本上所有集合类型都有使用,可以点击进入List、Map、Set等实现类中看看其运用:<? extends T>和<? super T>,以及<?>的区别:上限:<? extends T> 只能使用T类型或者T类型的子类对象。下限:<? super T> 只能使用T类型或者T的父类及接口实例...原创 2017-02-07 16:34:50 · 94 阅读 · 0 评论 -
clone()的深拷贝、浅拷贝
浅拷贝:拷贝时,直接复制对象区域,如果属性中有引用对象,则直接拷贝引用而不是对象本身,所以新对象和旧对象的引用属性,改变时会互相影响。深拷贝:新对象与旧对象不互相影响,拷贝时需要对引用类型的属性特殊拷贝处理,比如针对引用对象本身再调用该对象的clone一次。 Object的clone()方法,该方法为浅拷贝,即对象中的属性如果为引用类型,也直接将引用赋值给新对象。另外,实现该方法时,...原创 2017-02-07 15:34:48 · 219 阅读 · 0 评论 -
UTF8和GBK区别,以及读取文件存在BOM,第一个字符值为65279
一、GBK的文字编码:是双字节来表示的,即不论中、英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。UTF-8编码:则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的网站则用UTF-8节省空间。所以如果是UTF8编码,则在外国人的英文IE上也能显示中文,而无需他们下载IE的中文语言支持包。 所以,...原创 2017-02-07 11:45:32 · 410 阅读 · 0 评论 -
IO流的认识
流的详细介绍:字符流和字节流:读取文件分为这两类,字符流read时是按每次两个字节(1字符按2字节,汉字也算一个字符)来读取的,而字节流读取时是按每次一个字节读取。通过相应的类,将字节流转化为字符流(InputStreamReader&OutputStreamWriter),更易于操作。一般flush()是空的没有实现代码。缓冲流:作用相当于数据库的批量操作,每次读取一定量的数...原创 2017-02-06 22:53:33 · 137 阅读 · 0 评论 -
反射、注解
反射模式在各种架构都有所使用。有三种方式获得Class对象,假若有类A:1、Class class1 = A.class;2、A a = new A();Class class1 = a.getClass(); 3、Class<?> class1= Class.forName("com.liu.A"); 而Class对象,可以从中获取该类拥有的所...2017-01-17 17:21:38 · 68 阅读 · 0 评论 -
Map、List等集合
编程思想是相通的,只是实现方式有所不同。 数据库中,我们常常用索引来找到具体某个值,当然会经常用联合索引。而在开发中,常常会有种情况:集合的key使用自定义类对象,需要自己实现hashCode()和equal()方法。 再来看看Map、List、Set等集合的实现:一、Map,以hashMap为例,1)初始化为长度16的数组,数组每个元素为一个链表对象。2)...2016-12-28 00:16:52 · 80 阅读 · 0 评论 -
多线程join()方法
直接代码:public static void main(String[] args) { List<Thread> list = new ArrayList(); for (int k = 0; k < 10; k++) { Thread t = new MyThread(k); list.add(t); } for (Threa...原创 2016-12-09 15:29:49 · 106 阅读 · 0 评论 -
线程池汇总
一、线程池:Executors是创建线程池的工厂方法,首先看Executors的所有方法:其中有三个比较常用: 以上三个方法返回的对象不同,其实看看源码就清楚了:public interface ScheduledExecutorService extends ExecutorService { ScheduledFuture<?> schedule(Run...原创 2016-12-05 12:20:47 · 87 阅读 · 0 评论 -
Guava的LoadingCache
一、使用1)简单初始化: LoadingCache<Long, Long> loadCache = CacheBuilder.newBuilder() .expireAfterWrite(6, TimeUnit.SECONDS) .maximumSize(100) .build(...原创 2019-09-02 22:15:18 · 2710 阅读 · 0 评论