随笔分类 - Java
摘要:多线程除了同步问题外,还需要线程之间的协作。比如说最经典的生产者 消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生
阅读全文
摘要:创建线程有2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,就提供了Callable
阅读全文
摘要:ThreadPoolExecutor ThreadPoolExecutor继承了AbstractExecutorService类,并提供了四个构造器,事实上,通过观察每个构造器的源码具体实现,发现前面三个构造器都是调用的第四个构造器进行的初始化工作。 各个参数含义: corePoolSize:核心池
阅读全文
摘要:对于多线程编程,java中有同步容器(HashTable,Vector),并发容器(ConcurrentHashMap、CopyOnWriteArrayList),还有阻塞队列。 非阻塞队列,比如PriorityQueue、LinkedList,一个很大问题就是:它不会对当前线程产生阻塞,那么在面对
阅读全文
摘要:concurrent包下的并发容器 JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能。因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了并发性,当多个线程竞争容器时,吞吐量严重降低。因此Java5开始
阅读全文
摘要:Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。 CopyOnWrite原理 CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,
阅读全文
摘要:同步容器 在Java中,同步容器主要包括2类: 1. Vector、Stack、HashTable。Vector实现了List接口,Vector实际上就是一个数组,和ArrayList类似,但是Vector中的方法都是synchronized方法,即进行了同步措施。Stack也是一个同步容器,它的方
阅读全文
摘要:Java中的内存泄露,广义并通俗的说,就是:不再会被使用的对象的内存不能被回收,就是内存泄露。 Java中的内存泄露与C++中的表现有所不同。在C++中,所有被分配了内存的对象,不再使用后,都必须程序员手动的释放他们。所以,每个类,都会含有一个析构函数,作用就是完成清理工作,如果我们忘记了某些对象的
阅读全文
摘要:1、JVM的结构: JVM主要由类加载器子系统、运行时数据区(内存空间)、执行引擎以及本地方法接口等组成。其中运行时数据区又由方法区、堆、Java栈、PC寄存器、本地方法栈组成。 从上图中还可以看出,在内存空间中方法区和堆是所有Java线程共享的,而Java栈、本地方法栈、PC寄存器则由每个线程私有
阅读全文
摘要:Question:在并发编程中,多个线程之间采取什么机制进行通信(信息交换),什么机制进行数据的同步? Answer:在Java语言中,采用的是共享内存模型来实现多线程之间的信息交换和数据同步的。 线程之间通过共享程序公共的状态,通过读-写内存中公共状态的方式来进行隐式的通信。同步指的是程序在控制多
阅读全文
摘要:Comparable对实现它的每个类的对象进行整体排序。这个接口需要类本身去实现。若一个类实现了Comparable 接口,实现 Comparable 接口的类的对象的 List 列表 ( 或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。此外,实现 Comp
阅读全文
摘要:概述 NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。传统IO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道的事件
阅读全文
摘要:抽象类和接口 抽象类:只要包含一个抽象方法的类就必须被声明为抽象类,抽象类可以声明方法的存在而不去实现它,被声明为抽象的方法不能包含方法体。抽象类的子类为父类中的所有抽象方法提供具体的实现,否则它们也是抽象类。抽象类的成员变量默认为default,当然也可以被定义为private, protecte
阅读全文
摘要:代理模式分为静态代理和动态代理。静态代理是由程序猿创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。动态代理是在程序运行时,通过运用反射机制动态的创建而成。 静态代理 1、RealSubject 是委托类,Proxy 是代理类;2、Subject 是委托类
阅读全文
摘要:LinkedHashMap实现了Map接口,是HashMap的直接子类,它同时满足HashMap和linked list的某些特性。可将LinkedHashMap看作采用linked list增强的HashMap。 LinkedHashMap在HashMap的基础上,采用双向链表(doubly-li
阅读全文
摘要:TreeMap实现了SortedMap接口,也就是说会按照key的大小顺序对Map中的元素进行排序,key大小的评判可以通过其本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator)。TreeMap底层通过红黑树(Red-Black tree)实现,也
阅读全文
摘要:Java源代码被编译成class字节码,最终需要加载到虚拟机中才能运行。整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。 加载 通过一个类的全限定名获取描述此类的二进制字节流的过程。虚拟机设计团队把加载动作放到JVM外部实现,以便让应用程序决定如何获取所需的类,实现这个动作的代
阅读全文
摘要:LinkedList 的本质是双向链表。实现 List 接口,能对它进行队列操作。实现 Deque 接口,能将LinkedList当作双端队列使用。LinkedList 是非同步的。 LinkedList的继承关系 LinkedList构造函数 LinkedList的API 源码分析 List接口的
阅读全文
摘要:ArrayList LinkedList HashMap / HashTable / HashSet LinkedHashMap and LinkedHashSet TreeMap and TreeSet Comparable与Comparator Java所有的集合类都位于java.util包下,
阅读全文

浙公网安备 33010602011771号