java
文章平均质量分 84
努力的小强
这个作者很懒,什么都没留下…
展开
-
Java7 HashMap
Java7 HashMap结构HashMap里面是一个数组,然后数组中每个元素是一个单向链表。上图中,每个绿色的实体是嵌套类Entry的实例,Entry包含四个属性:key,value,hash值和用于单向链表的next。capacity:当前数组容量,始终保持2^n,可以扩容,扩容后数组大小为当前的2倍。loadFactor:负载因子,默认为0.75.threShold:扩容的阈值,等于capacity*loadFactor。Java7 HashMap put() public V p原创 2020-11-08 21:29:00 · 94 阅读 · 0 评论 -
CyclicBarrier源码解析
CyclicBarrier的使用CyclicBarrier,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。在所有等待线程被释放以后,CyclicBarrier可以被重用。import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.BrokenBarrierExceptio...原创 2019-12-13 20:52:38 · 206 阅读 · 0 评论 -
CountDownLatch源码解析
综述CountDownLatch也叫闭锁,是一种倒数计数器。CountDownLatch等待多个线程执行完毕后才做一件事。CountDownLatch是比调用线程的join()方法更好的选择。CountDownLatch的使用import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorServ...原创 2019-12-12 17:09:48 · 89 阅读 · 0 评论 -
Semaphore源码解析
Semaphore的使用import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.Semaphore;public class SemaphoreDemo { private final static int SEM_SIZE = 10; private stat...原创 2019-12-12 16:57:36 · 114 阅读 · 0 评论 -
ReentrantLock源码解析
ReentrantLock的使用import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class ReentrantLockDemo {// private static L...原创 2019-12-12 16:46:23 · 121 阅读 · 0 评论 -
AQS源码解析(五)
Condition条件锁实现(二)public final void await() throws InterruptedException {// if (Thread.interrupted()) {// throw new InterruptedException();// } else {// AbstractQueuedSynchroni...原创 2019-12-12 16:16:00 · 128 阅读 · 1 评论 -
AQS源码解析(四)
Condition条件锁实现(一)同步队列VS条件队列同步队列同步阻塞队列(同步队列)是一个双向链表,我们是用prev、next属性来串联节点。Node中还有一个nextWaiter属性,即使在共享锁模式下,这一属性也只为一个标记,指向了一个空节点,因此,在同步队列中,我们不会用它来串联节点。条件队列每创建一个Condition对象就会对应一个条件队列,每一个调用了Condition对...原创 2019-12-11 22:39:01 · 128 阅读 · 0 评论 -
AQS源码解析(三)
Lock&Condition&AQSLock是一个接口,以ReentrantLock为例。ReentrantLock实现了Lock接口,ReentrantLock中有一个newCondition方法,这个方法调用了ReentrantLock的内部类Sync的newCondition方法,Sync的newCondition方法返回的是一个ConditionObject对象,这个对象...原创 2019-12-11 22:20:06 · 238 阅读 · 2 评论 -
AQS源码解析(二)
AQS共享模式的使用import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.*;import java.util.concurrent.atomic.AtomicInteger;public class SemaphoreDemo { //设定信号数量 pri...原创 2019-12-11 21:50:55 · 106 阅读 · 0 评论 -
AQS源码解析(一)
父类AbstractOwnableSynchronizer源码解析AbstractOwnableSynchronizer为创建可能需要所有权概念的锁和同步器提供了基础public abstract class AbstractOwnableSynchronizer implements java.io.Serializable { /** Use serial ID e...原创 2019-12-11 21:42:24 · 122 阅读 · 0 评论 -
ThreadLocal
ThreadLocal介绍ThreadLocal——线程本地变量副本当时用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,每一个线程都可以独立地改变自己的副本,而不会影响其他线程所对应的副本。ThreadLocal常用方法ThreadLocal类接口很简单,常用方法如下:public void set(T value)设置当前线程的线程...原创 2019-12-09 10:49:10 · 118 阅读 · 0 评论 -
Sychronized线程通信
管道流的种类管道流是用来在多个线程之间进行信息传递的Java流。管道流分为字节流管道流和字符管道流字节管道流:PipedOutputStream和PipedInputStream。字符管道流:PipedWriter和PipedReader。字节管道流&字符管道流字节管道流是通过底层一个是byte数组存储数据的。Java的管道输入与输出实际上使用的是一个循环缓冲数组来实现的。输入流...原创 2019-12-09 10:41:42 · 158 阅读 · 0 评论 -
Synchronized
synchronized的作用在并发编程中存在线程安全问题,主要原因有:存在共享数据;多线程共同操作共享数据;关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,实现线程安全。synchronized使用方式synchronized可以是有在代码块和方法中,根据使用的位置不同,可以有这些使用场景:分类具体分类被锁的对象代码示例方法实例方...原创 2019-12-09 10:28:43 · 149 阅读 · 1 评论 -
Volatile
volatile的作用volatile的作用是保证共享变量的可见性,不能保证原子性,也不能保证线程安全。volatile的作用是确保所有线程在同一时刻读取到的共享变量的值是一致的。如果某个线程对volatile修饰的共享变量进行修改,那么其他线程可以立刻看到这个更新。硬件系统架构CPU首先使用自己的寄存器,然后使用速度更快的L1缓存,其中L1D缓存数据,L1I缓存指令。L1缓存和次...原创 2019-12-09 09:44:45 · 157 阅读 · 0 评论 -
Thread类源码分析
/** Thread类源码分析 *//** ------ 1. Thread常用属性 ------ **///线程名字private volatile String name;//优先级private int priority;//是否是守护线程private boolean daemon = false;//将会被执行的Runnable.private Run...原创 2019-12-07 23:12:54 · 246 阅读 · 0 评论 -
线程常用方法辨析(二)
yield()方法yield字面意思:放手,放弃,投降yield()方法的意思是告诉CPU执行其他的线程,当前线程让出CPU的执行权利yield()方法不能保证使得当前正在运行的线程迅速转换到可运行的状态yield()方法的作用就是将当前线程从执行中的状态转变到可执行状态yield()方法不能保证其他线程一定能够执行,因为执行过yield()方法的 线程当前依然是可执行的状态,有可能被...原创 2019-12-07 23:10:39 · 89 阅读 · 0 评论 -
线程常用方法辨析(一)
sleep()方法sleep()方法的作用是让当前线程暂停指定的时间(毫秒)sleep()方法只是暂时让出CPU的执行权,并不释放锁由于对象锁没有被释放,其他线程仍然无法访问这个对象sleep()方法不需要在同步的代码块中执行,wait()方法必须要在同步的代码块中执行sleep()可以通过interrupt()方法打断线程的暂停状态sleep()只是线程的操作,用于短时间暂停线程,...原创 2019-12-07 23:06:44 · 102 阅读 · 0 评论 -
线程中断
线程中断的概念概念Java中线程中断是一种协作机制通过中断并不能直接终止线程的运行需要被中断的线程自己处理中断实现思路每个线程有一个boolean类型的标志位,代表线程是否中断线程1想中断线程2,线程1只需要设置线程2的中断标志位等于true线程2在合适的时候处理该中断请求。甚至线程2可以选择不处理中断请求。线程中断相关方法public static b...原创 2019-12-07 22:51:54 · 109 阅读 · 0 评论 -
并发线程——线程的创建
可以创建线程的方法1.Thread类继承Thread类的方式创建线程a.定义Thread的子类,重写run()方法。run方法的方法体为该线程要完成的任务b.创建Thread子类的实例,即创建了线程对象c.调用线程对象的start()方法来创建并启动线程2.Runnable接口实现Runnable接口的方式创建线程a.创建Runnable接口的实现类,重写run()方法。run方法...原创 2019-12-07 22:41:49 · 100 阅读 · 0 评论