摘要: 接 口:★★★★★ 抽象类和接口的区别: 1、抽象类可以继承,而且必须是单继承,接口可以实现,而且可以多实现 2、抽象类中可以定义非抽象的方法,子类可以直接拿来使用。接口里面都是抽象的方法,子类必须实现 3、抽象类是is a关系和人接口是like a关系 4、抽象类的成员修饰符可以自定义 1:是用关 阅读全文
posted @ 2018-03-01 17:57 hanxue1122 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 多 态★★★★★(面向对象特征之一):函数本身就具备多态性,某一种事物有不同的具体的体现。 体现:父类引用或者接口的引用指向了自己的子类对象。//Animal a = new Cat();父类可以调用子类中覆写过的(父类中有的方法) 多态的好处:提高了程序的扩展性。继承的父类或接口一般是类库中的东西 阅读全文
posted @ 2018-03-01 17:48 hanxue1122 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 一、synchronized synchronized关键字可以用于声明方法,也可以用来声明代码块,下面分别看一下具体的场景(摘抄自《大型网站系统与Java中间件实践》) 案例一:其中foo1和foo2是SynchronizedDemo1类的两个静态方法。在不同的线程中,这两个方法的调用是互斥的,不 阅读全文
posted @ 2018-03-01 17:33 hanxue1122 阅读(141) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/zhangerqing/article/details/43057799 https://www.cnblogs.com/dengzz/p/5688021.html 阅读全文
posted @ 2018-03-01 17:19 hanxue1122 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 一、ThreadLocal基础知识 ThreadLocal是线程的一个本地化对象,或者说是局部变量。当工作于多线程中的对象使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程分配一个独立的变量副本。所以每一个线程都可以独立地改变自己的副本,而不会影响其他线程所对应的副本 阅读全文
posted @ 2018-03-01 17:18 hanxue1122 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 一、Future Future和Callable基本是成对出现的,Callable负责产生结果,Future负责获取结果。 1、Callable接口类似于Runnable,只是Runnable没有返回值。 2、Callable任务除了返回正常结果之外,如果发生异常,该异常也会被返回,即Future可 阅读全文
posted @ 2018-03-01 16:58 hanxue1122 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 1. 什么是阻塞队列 阻塞队列(BlockingQueue)是 Java 5 并发新特性中的内容,阻塞队列的接口是 java.util.concurrent.BlockingQueue,它提供了两个附加操作:当队列中为空时,从队列中获取元素的操作将被阻塞;当队列满时,向队列中添加元素的操作将被阻塞。 阅读全文
posted @ 2018-03-01 16:49 hanxue1122 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 一、什么是CopyOnWrite容器 CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对Copy 阅读全文
posted @ 2018-03-01 16:24 hanxue1122 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 一、 背景 线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,合理的使用线程池可以对线程进行统一的分配、调优和监控,并有以下好处: 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立 阅读全文
posted @ 2018-03-01 15:54 hanxue1122 阅读(571) 评论(0) 推荐(0) 编辑
摘要: 周末看到一个用jstack查看死锁的例子。昨天晚上总结了一下jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令。供大家参考 1.Jstack 1.1 jstack能得到运行java程序的java stack和native stack的信息。可以轻松得知当前线程的运行情况。如下 阅读全文
posted @ 2018-03-01 15:16 hanxue1122 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。 乐观锁(Op 阅读全文
posted @ 2018-03-01 14:46 hanxue1122 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 1、返回当前线程的名称:Thread.currentThread.getName(); 2、Thread的名称由Thread+编号定义,编号从0开始 3、线程要运行的代码统一都放到了run方法下面 4、线程要运行必须要通过类中指定的方法开启。Start()(启动后就多了一条执行路径) 注意:star 阅读全文
posted @ 2018-03-01 14:37 hanxue1122 阅读(325) 评论(0) 推荐(1) 编辑
摘要: HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中,甚至会要求你实现HashMap 阅读全文
posted @ 2018-03-01 12:01 hanxue1122 阅读(436) 评论(1) 推荐(0) 编辑
摘要: 多线程下[HashMap]的问题: 1、多线程put操作后,get操作导致死循环。2、多线程put非NULL元素后,get操作得到NULL值。3、多线程put操作,导致元素丢失。 本次主要关注[HashMap]-死循环问题。 为何出现死循环? 为何出现死循环? 大家都知道,HashMap采用链表解决 阅读全文
posted @ 2018-03-01 11:43 hanxue1122 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 一、背景: 线程不安全的HashMap 因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。 效率低下的HashTable容器 HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下 阅读全文
posted @ 2018-03-01 11:21 hanxue1122 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 一、概念 TreeMap是基于红黑树结构实现的一种Map,要分析TreeMap的实现首先就要对红黑树有所了解。 要了解什么是红黑树,就要了解它的存在主要是为了解决什么问题,对比其他数据结构比如数组,链表,Hash表等树这种结构又有什么优点。 1.二叉查询树、红黑树介绍、 1.数组,优点:(1)随机访 阅读全文
posted @ 2018-03-01 10:43 hanxue1122 阅读(365) 评论(1) 推荐(0) 编辑