Java 基础
文章平均质量分 73
SUN123565
这个作者很懒,什么都没留下…
展开
-
HashMap扩容
HahMap什么时候扩容呢?(1)当map中k-v总数即下面的size大于threshold 的时候if (++size > threshold) resize(); (2)table=null或者table.length =0 threshold 是个什么?HahMap在初始化的时候给threshold的赋值: this.thr原创 2016-09-18 13:58:36 · 341 阅读 · 0 评论 -
Java 线程状态
本文按:一. Java 线程的几种状态及说明 二. 示例程序一. Java线程的状态Java线程的状态可以在Java.lang.Thread.State中获取到,其中标识的状态有以下六种:(1)NEW:创建新的线程,还没启动(2)RUNNABLE:调用start()后正在执行的线程(3)BLOCKED:阻塞状态,等待锁的释放, 比如线程A进入了一个synchronized方法,线程B也想进入这原创 2017-12-08 04:47:14 · 341 阅读 · 0 评论 -
java中四种线程池的区别
1.线程池的使用在Java中,通常使用Executors 获取线程池。常用的线程池有以下几种: (1)CachedThreadPool (2)FixedThreadPool (3)ScheduledThreadPool (4)SingleThreadExecutor明确概念:阻塞队列:阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是: (1)在队列为原创 2017-12-07 08:43:19 · 6947 阅读 · 1 评论 -
Java finally使用
finally语句块的执行条件:(1)与finally对应的try语句块被执行 (2)try语句块没有执行System.exit, 换句话说是JVM没有退出原创 2016-09-17 10:39:17 · 449 阅读 · 0 评论 -
JSR 133 Java 内存模型(JMM)FAQ
本文按:红色字体-重要 绿色字体-不太懂 蓝色字体-非常重要一. 什么是内存模型 二. 其他语言C++是否有内存模型 三. JSR 133 是关于什么的 四. 重排序是什么意思 五. 旧的JMM有什么缺陷 六. 不正确的同步意味着什么 七. 同步都做了哪些操作 八. 在旧的内存模型中final域为什么可以改变值 九. final域在新的JMM中是如何工作的 十. vo翻译 2017-12-12 04:15:31 · 512 阅读 · 0 评论 -
jvm内存分配及垃圾回收
很久之前就一直在学习JVM,但是一直也没有好好的总结,最近终于有了空闲,将之前学习的内容整理成了一个PPT,PPT可以免费下载。也希望大神们可以批评指正。ppt中主要包含下面几部分:Java内存模型内存分配策略分代垃圾收集虚拟机工具垃圾收集器原创 2016-09-22 16:23:28 · 318 阅读 · 0 评论 -
bit、byte、位、字节、汉字、字符之间的区别
bit,byte,位,字节,汉字,字符之间的区别package com.suypower.chengyu.test;public class ByteTest {/** * byte 8 bits -128 - + 127 * 1 bit = 1 二进制数据 * 1 byte = 8 bit * 1 字母 = 1 byte = 8 bit(位) * 1 汉字 = 2 b转载 2016-11-30 13:54:23 · 1443 阅读 · 0 评论 -
浅谈Java中的hashcode方法
浅谈Java中的hashcode方法原文出处:http://www.cnblogs.com/dolphin0520/p/3681042.html哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法:public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地转载 2016-10-20 20:28:23 · 318 阅读 · 0 评论 -
Java 虚拟机 - 上
本文按 一. 什么是Java虚拟机 二. 虚拟机的生命周期 三. Java虚拟机结构 四. 数据类型( Data Types) 五. 字大小 六. Class Loader 系统 七. 方法区(method area) 八. 堆(Heap) 九. 程序计数器(The Program Counter) 十. Java 栈一. 什么是Java虚拟机Jav翻译 2017-12-13 14:57:08 · 332 阅读 · 0 评论 -
Java 虚拟机 - 下
本文按 七 方法区(method area) 八 堆(Heap) 九 程序计数器(The Program Counter) 十 Java 栈七 方法区(method area)当虚拟机需要加载一个Type的时候,它使用classloader来定位具体的类位置。Classloader读取class file并且把字节码传递到虚拟机中。虚拟机提取字节码中的类型信息,存储到method...翻译 2017-12-15 15:28:21 · 314 阅读 · 0 评论 -
多线程 Thread 与 Runnable类
1. 如何在java中实现多线程java中实现多线程有两种方式 (1)继承Thread类 (2)实现Runnable接口其中java.lang.Thread 类也 实现了Runnable 接口,实现了Run方法。2.分析两种实现方式哪一种更优实现Runnable 优于继承Thread类,原因有以下: (1)java 类只能继承一个,但是却能实现多个接口,所以以实现接口的方式更灵活; (2原创 2017-12-07 02:36:32 · 300 阅读 · 0 评论 -
多线程 Callable Runnable 与Future
本文按: 1. Callable 与Runnable的使用 2. Callable 与Runnable的区别 3. Future的使用 4. FutureTask的使用1. Callable 与Runnable的使用Callable经常与ExecutorService配合使用,用于提交带有返回值的任务; Runnable可以与thread pool配合使用也可以单独使用。具体的使用方法如下:原创 2017-12-07 06:49:28 · 422 阅读 · 0 评论 -
Java 并发编程-阻塞队列
转自:http://www.cnblogs.com/dolphin0520/p/3932906.html在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)。 使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒转载 2017-12-08 09:35:59 · 223 阅读 · 0 评论 -
HashMap 与 ConcurrentHashMap
传送门:http://ifeve.com/concurrenthashmap/转载 2017-12-08 15:17:33 · 239 阅读 · 0 评论 -
Java 并发编程 Copy-On-Write
转自:http://ifeve.com/java-copy-on-write/Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是Cop转载 2017-12-08 14:56:39 · 263 阅读 · 0 评论 -
HashMap源码
HashMap中的域(1) transient Node[] table;//存储node的数组(2)threshold:(3)static final int DEFAULT_INITIAL_CAPACITY = 1 (3)static final float DEFAULT_LOAD_FACTOR = 0.75f;//负载因子,当map中的数量大于DEFAULT_INITI原创 2016-09-18 13:58:23 · 233 阅读 · 0 评论 -
java 枚举使用中注意的问题
通常在需要使用数据集合的时候,枚举便派上了用场。大多数情况下使用枚举的时候无意识的不会去修改里面的值。那么枚举中的值到底能不能修改呢? 答案是:一旦定义了枚举,最好不要妄图修改里面的值,除非修改是必要的。 今天遇到的问题就是和枚举相关的,因为之前并不知道枚的对象实际上是单例,导致了非常严重的问题先看下代码(1)定义的枚举: public enum SquareAreaEn原创 2016-09-18 13:58:12 · 1599 阅读 · 0 评论 -
java keywords -final
第一篇从final关键字说起 Contentsfinal基本用法final深入理解 final基本用法 final:无法改变的 1.1 final field: final field 有两种解释: (1)不会改变的编译时常量:编译器可以将该常量带入带能用到它的计算式中,在编译时执行计算,可以减轻运行时负担。此时的常量必须是 fina原创 2016-09-18 13:57:48 · 355 阅读 · 0 评论 -
Java8系列之重新认识HashMap
转自:http://www.importnew.com/20386.html简介Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示:下面针对各个实现类的特点做一些说明:(1) HashMap:它根据键的hashCode值存储数转载 2016-09-18 13:58:30 · 1107 阅读 · 0 评论 -
final关键词在多线程环境中的使用
原文:http://www.javamex.com/tutorials/synchronization_final.shtml Contents为什么final在多线程中是必要的final对象的引用final的局限性什么时候需要使用final自java 5 起, final关键词在并发中的一个特殊应用是非常重要而且常常被忽视的,实际上,fianl 可以保证正在创转载 2016-09-18 13:57:54 · 10998 阅读 · 1 评论 -
Java 变量初始化顺序
变量定义的先后顺序决定初始化顺序,即使变量定义散布在方法定义之间,他们仍旧会在方法被调用之前得到初始化,构造方法也是特殊的方法执行顺序:静态块, 静态变量,非静态变量,构造方法 每次在创建对象的时候非静态变量都会被初始化 静态对象只会在类加载的时候被初始化一次原创 2016-09-18 14:44:56 · 312 阅读 · 0 评论 -
String的不可变性
String的不可变性首先明确一点,String类被声明为final与String对象是immutable的没有必然的联系。那么为什么说String对象是不可变的呢?1、 我们知道String实现依靠的是char[], 那么首先看下String源码:public final class String implements java.io.Serializable, Comparable<Stri原创 2016-10-21 16:47:50 · 925 阅读 · 0 评论 -
finally遇到的坑
前言finally这个关键词在我个人开发过程中实际上并不算是真正使用过,虽然之前在理论学习的时候调试过finally到底是怎么回事:http://blog.csdn.net/xiaoxiaoxuanao/article/details/52573859但是在实际开发过程中如果真的遇到问题,并且和很多框架结合起来的话,这么简单的问题往往不容易被很容易的发现,很多时候会怀疑是不是那些框架结合起来导致的,原创 2016-10-11 09:38:58 · 2040 阅读 · 0 评论 -
Java static关键词
前言使用static关键词描述变量在内存中只有一份,是是一个共享全局变量。对于对象来说是单例的。在之前的文章中描述过enum在使用过程中遇到的问题:使用static关键词描述变量在内存中只有一份,是是一个共享全局变量。对于对象来说是单例的。总结1:不要试图改变共享的全局变量的属性值或者值,如果有类似的需求,最好封装在单个线程内部去做。总结2:那些不变的,耗时的,不能创建太多的,不希望被回收的对象都要创建成s原创 2016-10-11 23:37:38 · 328 阅读 · 0 评论 -
String StringBuilder and StringBuffer
这里主要关注String,StringBuilder和StringBuffer的在创建String时候的区别执行原理String在创建一个字符串的时候如果这样使用: String s = "s"; System.out.println(s.hashCode()); s = s + "s1"; System.out.println(s.hashCode());运行结果: 115114129从运原创 2016-10-20 20:03:35 · 351 阅读 · 0 评论 -
I/O 阻塞&非阻塞&同步&异步
阻塞(blocking)&非阻塞(non-blocking)I/O阻塞/非阻塞的关注点在与调用者是否等待被调用者返回。在实际应用中,大多数I/O请求是阻塞的,这意味着在I/O完成之前,控制权不会回到调用者手中。这种延迟在某些情况下会非常长,比如说执行read()或者write()操作。而非阻塞I/O**会在发出IO请求后控制权立即转移到调用者手中**,即使数据包没有准备好,也会返回一个错误标识,使得控制权立即转移到调原创 2017-03-08 06:25:20 · 459 阅读 · 0 评论 -
观察者模式(Observer Pattern)
简介观察者模式(Observer Pattern)通常用在 一对多的对象关系中。比如说,一个对象被改变,所有依赖他的对象都可以做出响应。观察者模式也被叫做发布-订阅(Publish/Subscribe)模式,监听模式等。目前非常流行的nodejs框架使用的事件驱动模型也是利用观察者模式实现的。观察者模式(Observer pattern)属于行为模式。翻译 2017-03-09 07:42:33 · 275 阅读 · 0 评论 -
常用排序算法解析-冒泡排序 插入排序 快速排序
一 冒泡排序冒泡排序是最简单的排序算法之一,也是面试中常考的算法。其实现的基本思路是: (1)使用一前一后两个指针,i, j (2)j一直往前走,i从每次从0开始扫描到j (3)i位置的元素与j位置的元素交换,确保0-j位置的数字都按序排列时间复杂度:O(n2)代码如下: @Test public void testBubbleSort(){ i...原创 2018-03-05 12:43:06 · 650 阅读 · 0 评论