![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
文章平均质量分 69
yxy000
这个作者很懒,什么都没留下…
展开
-
JAVA的Map类:HashMap,LinkedHashMap,TreeMap,ConcurrentHashMap,WeakReferenceHashMap
首先是HashMap。HashMap实现算法是哈希表,实现的数据结构是链表与数组。初始化的参数有初始容量(initialCapacity)和装载因子(loadFactor)。哈希表通过某种算法,将对象进行分类,每一类即是一个桶,桶由数组实现,桶的数量也是数组的大小,就是初始容量。对于冲突,通过在每一个桶下挂一个链表来解决。装载因子表示哈希表的元素拥挤程度,其计算公式为:α= n/m。其中,n为元素原创 2017-04-17 17:44:13 · 3544 阅读 · 0 评论 -
JAVA集合类解析之List类
JAVA中主要使用的List类有ArrayList和LinkedList,以及不常用的Vector。ArrayList是普通Array数组的扩充,基于队列实现,LinkedList则是基于链表实现。以上两者皆为线程非安全。Vector也是基于队列实现的,但不同于ArrayList的是,它是线程能安全的,因此资源开销相较于ArrayList也会更大。ArrayList相比于普通Array数组最大的特原创 2017-11-14 17:25:02 · 373 阅读 · 0 评论 -
Java中的CAS(Compare And Swap)
CAS是compareAndSwap的简称,它可以帮助我们实现多线程执行的安全性。CAS有三个操作数:内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做并返回false。虽然步骤分为两笔,比较和赋值,但CAS是在native层的unsafe类中实现的,属于硬件级别的操作,同样可以保证原子性。下面是compareAn原创 2017-05-03 22:58:11 · 440 阅读 · 0 评论 -
JAVA中函数传参的意义
JAVA中有两种类型,基本类型和引用类型。但在函数传参的过程中,基本类型和引用传递的到底是什么呢?在JVM中,基本类型中的数值使用一块内存来保存。引用类型由两块内存来保存,一块内存中装的是真实的数据,就是引用的对象,另一块内存中装的是指向类数据的引用,存储的是对象的内存地址。jvm需要通过此引用找到该对象的方法表,类型信息。其中类型信息包括类型基本信息,常量池,字段信息,方法信息,类变量信息,原创 2017-11-17 18:39:42 · 1334 阅读 · 0 评论 -
JAVA中的线程
Java是一个支持多线程编程的语言,我们可以使用Thread类实现多线程操作。我们定义线程,可以使用在Thread的构造方法中传入一个Runnable的形式,也可重写Thread的run方法,但是无论怎么定义,启动线程时,一定要调用线程的start()方法,不要调用线程的run方法;区别就是,调用start()方法,会开启一个新线程执行run()方法中的程序,而调用run()方法只会在原线程中原创 2017-04-27 22:41:31 · 183 阅读 · 0 评论 -
JAVA中的String类
Java中有一个很特殊的类,String类,用来存储字符串。有一个很经典的问题,String string = new String("abcdefg");String string = "abcdefg";这两种创建方式有什么不同?首先,我们要明确,对象的创建都是在JVM的堆中的。同时,JVM为了优化字符串的存储,还在方法区中开辟了一块字符串常量池,避免相同字符串对象的重复创建原创 2017-04-26 22:20:21 · 209 阅读 · 0 评论 -
JVM虚拟机以及垃圾回收机制学习总结
JVM虚拟机的内存结构如下图所示方法区和堆由所有线程共享,其他区域都是线程私有的程序计数器(Program Counter Register)通过程序计数器来记录线程执行的jvm字节码的行数虚拟机栈(Java Stack)虚拟机栈也是线程私有的,每创建一个线程,虚拟机就会为这个线程创建一个虚拟机栈,虚拟机栈表示Java方法执行的内存模型,每调用一个方法,就会生成一个翻译 2017-04-01 23:33:17 · 286 阅读 · 0 评论 -
JAVA设计模式之单例模式
在应用程序中,有些资源是全局共享的,整个应用程序只需要一个就够了,多了反而会产生冲突,例如Windows系统中的回收站。于是,就有了单例模式,制造一个全局共享且唯一的对象,供整个应用程序使用。单例模式分两种,懒汉模式和饿汉模式。所谓懒汉模式,也是线程安全的,当有需要的时候,再去创建一个对象。public class PictureLoader { privat原创 2017-04-23 22:05:08 · 175 阅读 · 0 评论 -
java中的volatile与atomic
volatile可以保证所有线程看见的值都是最新的,atomic可以保证+-的原子性操作。每个线程都有自己独立的数据块,对于共享变量,它们先将其拷贝到自己的内存空间,创建一个副本,之后再进行的操作针对的都是副本,最后在线程退出前的某一时刻把值再放回到共享变量中。而volatile保证了每次在线程内存空间中副本的变化都会直接映射到共享内存之中,使共享内存中的变量值始终为最新的。但volati原创 2017-05-03 23:32:37 · 941 阅读 · 0 评论 -
java中锁的深入理解(二)
上一篇讲到了synchronized实现原理,这一篇一起来学习一下Lock的底层实现原理。java.util.concurrent包中有很多lock接口的实现类,ReentrantLock,ReadWriteLock,这在我的另一篇文章中也提到了。这些实现类的内部都使用了队列同步器AbstractQueuedSynchronizer类作为依赖。下面我们用AQS来指代AbstractQueu原创 2017-05-03 20:47:39 · 238 阅读 · 0 评论 -
java中锁的深入理解(一)
JAVA中的锁分为两种,synchronized和Lock。他们都可以实现同步,具体的用法,可以参考我的另一篇文章。下面深入探讨一下,synchronized和Lock两种锁方式的原理。首先看一下synchronized。public class SynchronizedDemo { public void method() { synchron原创 2017-05-03 20:08:43 · 280 阅读 · 0 评论 -
Java 锁机制
Java中,锁分为内部锁与显式锁两种类型。内部锁又分为对象锁与类锁。Java中,每个对象内部都有一个锁,可以通过synchronized方法来获取对象锁。同样的,每个类也有一个锁,可以直接在用synchronized来修饰方法和使用synchronize(this)来获取类锁。获取了类锁之后,其他被synchronized修饰的方法便无法被调用了。JDK5.0之后,Java中加入了原创 2017-04-17 20:22:18 · 238 阅读 · 0 评论 -
Java线程池
Java的线程池存在于java.util.concurrent包中的Executor框架。Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,CompletionService,Future,Callable等。他们的关系为图片来自第七城市网。publ原创 2017-04-27 17:50:41 · 198 阅读 · 0 评论