#RR

ArrayList初始化

ArrayList部分一共五篇文章了,并且引入了时间复杂度来分析,强烈建议大家一定要按顺序阅读,本文是第1篇。前些天的文章,反复的画图,不停的重复,就是想让大家理解,对象在内存中是什么样的。也是为今天的及以后的讲解打下基础。如果要说大家在写Java代码的时候哪个类用得最多,我想除了String,基本上就是ArrayLi...
代码星球 代码星球·2020-12-10

Arraylist LinkedList Hashmap时间复杂度

name时间复杂度ArrayList:根据下标查询:arr[10]O(1)ArrayList:根据内容查询:for循环遍历O(n)ArrayList底层是j基于数组实现linkedList底层是基于 链表实现LinkedList查询无论下标还是内容都是O(1)JDK7hashmap根据key查询:没有hash...

ConcurrentHashMap原理分析(1.7与1.8)

 以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同时在同一数组下...

Arraylist动态扩容详解

ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长。ArrayList不是线程安全的,只能用在单线程环境下。实现了Serializable接口,因此它支持序列化,能够通过序列化传输;实现了RandomAccess接口,支持快速随机访问,实际上就是通过下标序号进行快速访问;实现了Cloneable接口,...

java System.arrayCopy使用说明

 javaSystem.arrayCopy使用说明java.lang.System.arraycopy() 方法复制指定的源数组的数组,在指定的位置开始,到目标数组的指定位置。 下面是System.arrayCopy的源代码声明: publicstaticvoidarraycop...

java.lang.ClassFormatError: Extra bytes at the end of class file

 在精简JRE过程中,将rt.jar中类通过FileInputStream,FileOutputStream进行拷贝操作出错:java.lang.ClassFormatError:Extrabytesattheendofclassfile 源代码:Java代码  byte&nbs...

深入浅出 Java Concurrency (15): 锁机制 part 10 锁的一些其它问题

  主要谈谈锁的性能以及其它一些理论知识,内容主要的出处是《JavaConcurrencyinPractice》,结合自己的理解和实际应用对锁机制进行一个小小的总结。 首先需要强调的一点是:所有锁(包括内置锁和高级锁)都是有性能消耗的,也就是说在高并发的情况下,由于锁机制带来的上下文切换、...

深入浅出 Java Concurrency (14): 锁机制 part 9 读写锁 (ReentrantReadWriteLock) (2)

  这一节主要是谈谈读写锁的实现。上一节中提到,ReadWriteLock看起来有两个锁:readLock/writeLock。如果真的是两个锁的话,它们之间又是如何相互影响的呢?事实上在ReentrantReadWriteLock里锁的实现是靠java.util.concurrent.locks....

深入浅出 Java Concurrency (13): 锁机制 part 8 读写锁 (ReentrantReadWriteLock) (1)

 从这一节开始介绍锁里面的最后一个工具:读写锁(ReadWriteLock)。ReentrantLock实现了标准的互斥操作,也就是一次只能有一个线程持有锁,也即所谓独占锁的概念。前面的章节中一直在强调这个特点。显然这个特点在一定程度上面减低了吞吐量,实际上独占锁是一种保守的锁策略,在这种情况下任何“读/读”...

深入浅出 Java Concurrency (12): 锁机制 part 7 信号量(Semaphore)

 Semaphore是一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore ...

深入浅出 Java Concurrency (11): 锁机制 part 6 CyclicBarrier

  如果说CountDownLatch是一次性的,那么CyclicBarrier正好可以循环使用。它允许一组线程互相等待,直到到达某个公共屏障点(commonbarrierpoint)。所谓屏障点就是一组任务执行完毕的时刻。 清单1一个使用CyclicBarrier的例子packagexy...

深入浅出 Java Concurrency (10): 锁机制 part 5 闭锁 (CountDownLatch)

此小节介绍几个与锁有关的有用工具。闭锁(Latch)闭锁(Latch):一种同步方法,可以延迟线程的进度直到线程到达某个终点状态。通俗的讲就是,一个闭锁相当于一扇大门,在大门打开之前所有线程都被阻断,一旦大门打开所有线程都将通过,但是一旦大门打开,所有线程都通过了,那么这个闭锁的状态就失效了,门的状态也就不能变了,只能...

深入浅出 Java Concurrency (9): 锁机制 part 4 锁释放与条件变量 (Lock.unlock And Condition)

本小节介绍锁释放Lock.unlock()。Release/TryReleaseunlock操作实际上就调用了AQS的release操作,释放持有的锁。publicfinalbooleanrelease(intarg){   if(tryRelease(arg)){  ...

深入浅出 Java Concurrency (8): 加锁的原理 (Lock.lock)

接上篇,这篇从Lock.lock/unlock开始。特别说明在没有特殊情况下所有程序、API、文档都是基于JDK6.0的。publicvoidjava.util.concurrent.locks.ReentrantLock.lock()获取锁。如果该锁没有被另一个线程保持,则获取该锁并立即返回,将锁的保持计数设置为1。...

深入浅出 Java Concurrency (7): 锁机制 part 2 AQS

 在理解J.U.C原理以及锁机制之前,我们来介绍J.U.C框架最核心也是最复杂的一个基础类:java.util.concurrent.locks.AbstractQueuedSynchronizer。 AQSAbstractQueuedSynchronizer,简称AQS,是J.U.C最复杂的一个类...
首页上一页...458459460461462...下一页尾页