![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础
文章平均质量分 89
hll174
没有一开始的大牛,先做好自己的小菜
展开
-
从java多线程内存模型说到ConcurrentHashMap
ConcurrentHashMap是Java5中新增加的一个线程安全的Map集合,可以用来替代HashTable。对于ConcurrentHashMap是如何提高其效率的,可能大多人只是知道它使用了多个锁代替HashTable中的单个锁,也就是锁分离技术(Lock Stripping)。实际上,ConcurrentHashMap对提高并发方面的优化,还有一些其它的技巧在里面(比如你是否知道在get转载 2016-03-17 16:21:23 · 1523 阅读 · 0 评论 -
从集合的resize看Java HashMap的死循环
问题的症状从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题。后来,我们的程序性能有问题,所以需要变成多线程的,于是,变成多线程后到了线上,发现程序经常占了100%的CPU,查看堆栈,你会发现程序都Hang在了HashMap.get()这个方法上了,重启程序后问题消失。但是过段时间又会来。而且,这个问题在测试环境里可能很难重现。转载 2016-03-17 17:09:31 · 2715 阅读 · 0 评论 -
Java transient关键字使用
在看hashmap源码分析的时候,看到了关键字transient的使用,自己对这个貌似接触的较少,有人说是在对象实现serilizable序列化的时候,用这个关键字可以屏蔽一些不需要在网络传输的字段属性,比如用户名和密码,对于对象的属性的传输只会在用户的内存中进行,不会具体保存在磁盘。具体的看到一篇文章,如下:1. transient的作用及使用方法 我们都知道一个对原创 2016-03-05 23:40:41 · 457 阅读 · 0 评论 -
java中进制的转换,Byte与16进制的转换
java中对于进制的转换有很多方式,其中对于常见的基本的二进制 八进制 十进制 十六进制等的转换有对于的包装类实现,不需要通过二外的算法来进行实现,具体如下: 首先关于最简单的二进制转换的方法有:十进制转成十六进制:String Integer.toHexString(inti)十进制转成八进制String Integer.toOctalString(int原创 2016-04-05 23:08:01 · 20266 阅读 · 0 评论 -
Java BIO、NIO、AIO 学习
先来个例子理解一下概念,以银行取款为例:同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写)。异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API)。阻塞 : ATM排队取款,你只能等待(使用阻塞I原创 2016-02-29 18:41:57 · 456 阅读 · 0 评论 -
java集合中的fail-fast机制
最初在学习java集合取值的时候,在用迭代器取值的时候,如果中途改变了集合的情况,迭代过程就会报ConcurrentModificationException异常,用例如下: List list = new ArrayList(); list.add("hello" ); list.add("world" ); list.add("java" ); I原创 2016-04-26 18:04:52 · 1073 阅读 · 0 评论 -
HashMap源码分析
考研时候数据结构中有对hash表算法的图示,最近在看hashmap的时候仔细看了下源码,同时结合了网上的资料重新再对hashmap整理了一下,梳理下记忆。原创 2016-03-06 18:12:26 · 926 阅读 · 2 评论 -
线程的单例模式与延迟加载中的Initialization on Demand Holder
面试的时候,常常会被问到这样一个问题:请您写出一个单例模式(Singleton Pattern)吧。好吧,写就写,这还不容易。顺手写一个:public final class EagerSingleton { private static EagerSingleton singObj = new EagerSingleton(); pr原创 2016-05-24 16:33:20 · 2300 阅读 · 2 评论 -
ArrayList源码分析
一、 ArrayList概述: ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurr原创 2016-03-15 23:06:30 · 462 阅读 · 0 评论 -
LinkedList源码分析
一、源码解析 1、 LinkedList类定义。 public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, java.io.Serializable LinkedList 是一个继承于AbstractSequ原创 2016-03-16 11:32:06 · 375 阅读 · 0 评论 -
Vector源码分析
Vector简介 Vector也是基于数组实现的,是一个动态数组,其容量能自动增长。 Vector是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。Vector源码剖析 Vector的源码如下(加入了比较详细的注释):原创 2016-03-16 17:41:35 · 579 阅读 · 0 评论 -
关于socket与serversocket中的输入输出流
1,客户端的socket连接到服务器的套接字原创 2014-10-17 23:45:02 · 10025 阅读 · 0 评论 -
HashSet源码分析
一、 HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。 HashSet set=new HashSet(); set.add(null);//不报错,因为底层是hashmap key值允许null二、 HashSet的实现:原创 2016-03-15 22:03:54 · 418 阅读 · 0 评论 -
常见内排序算法的java实现
先把结果放在前面,这样每次看到就能熟悉一次。排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。 内排序有可以分为以下几类: (1)、插入排序:直接插入排序、二分法插入排序、希尔排序。 (2)、选择排序:简单选择排序、堆排序。 (3)、交换原创 2016-03-10 11:35:16 · 759 阅读 · 0 评论