自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Dave的博客

数据搬运工,厚积薄发

  • 博客(21)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java并发-Executor框架

Executor框架的两级调度模型 Executor框架主要由3部分组成 1.任务:包括被执行任务需要实现的接口:Runnable接口或Callable接口 2.任务的执行:包括执行机制的核心接口Executor,以及继承自Executor的ExecutorService接口。(ThreadPoolExecutor和ScheduledThreadPoolExecutor) 3.异步计算...

2018-07-31 11:01:00 398

原创 Java并发-线程池

线程池的好处1.降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 2.提高相应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 3.提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配,调优和监控。线程池的处理流程1)线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创...

2018-07-30 16:43:17 209

原创 Java并发-Semaphore

Semaphore用来控制同时访问特定资源的线程数量,它通过协调各个线程来保证合理的使用公共资源。 比如马路上要限制流量,只允许同时有100辆车在这条路上行驶,其他的都在路口等待,所以前100辆车会看到绿灯,可以开进这条马路,后面的车会看到红灯,如果100辆中有5辆已经离开马路,那么后面就允许有5辆车驶入马路Semaphore内部包含公平锁和非公平锁,继承内部类Sync,其中Sync继承...

2018-07-30 14:22:51 191

原创 Java并发-CyclicBarrier

CyclicBarrier它允许一组线程互相等待,知道到达某个公共屏障点。barrier在释放等待线程后可以重用。 CyclicBarrier的内部是使用重入锁ReentrantLock和Condition。 public CyclicBarrier(int parties) { this(parties, null); } public Cy...

2018-07-30 12:00:18 206

原创 Java并发-CountDownLatch

CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作。 CountDownLatch的构造函数接受一个int类型的参数作为计数器。 当我们调用COuntDownLatch的countDown()时,N就会减1,CountDownLatch的await()会阻塞当前线程,知道N变成0。CountDownLatch的实现分析CountDow...

2018-07-29 11:40:25 194

原创 Java并发-HashMap在jdk1.7多线程中的问题

死循环HashMap扩容过程void resize(int newCapacity) { Entry[] oldTable = table; int oldCapacity = oldTable.length; if (oldCapacity == MAXIMUM_CAPACITY) { threshold = Integer.MAX_VALUE;...

2018-07-28 00:19:10 809

原创 Java并发-入队列/出队列

入队列入队列就是将入对节点添加到队列的尾部 举个例子: ·添加元素1。队列更新head节点的next节点为元素1节点。又因为tail节点默认情况下等于head节点,所以它们的next节点都指向元素1节点。 ·添加元素2。队列首先设置元素1节点的next节点为元素2节点,然后更新tail节点指向元素2节点。 ·添加元素3。队列首先设置tail节点的next节点为元素3节点。 ·添加元素...

2018-07-27 18:35:25 1765

原创 Java并发-Condition的实现分析

Condition基本用法 Lock lock = new ReentrantLock(); Condition condition = lock.newCondition(); public void conditionWait() { lock.lock(); try { condition.await()...

2018-07-27 15:09:09 210

原创 Java并发-ReentrantReadWriteLock锁降级/锁升级

读写锁读写锁维护了一对锁,一个读锁和一个写锁。 在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。锁升级/锁降级同一个线程中,在没有释放读锁的情况下,就去申请写锁,这属于锁升级,ReentrantReadWriteLock是不支持的。public class ReadWriteTest { public static void ...

2018-07-24 17:24:53 3722

原创 Java并发-类锁与对象锁

第一种比较:对象锁与synchronized方法public class TestSynchronized { public void test1() { synchronized (this) { int i = 5; while (i-- > 0) { System.out.pr...

2018-07-24 15:25:15 396

原创 Java并发-AQS如何完成线程同步

同步队列AQS依赖内部的同步队列(FIFO双向队列)来完成同步状态的管理,当前线程获取同步状态失败时,同步器将会将当前线程以及等待状态等信息构造成为一个节点(NODE)并将其加入同步队列,同时会阻塞当前线程,当同步状态释放时,会把首节点中的线程唤醒,使其再次尝试获取同步状态。 独占式同步状态获取与释放public final void acquire(int arg) { ...

2018-07-23 17:53:58 580

原创 为什么equals()与hashCode(),这两个方法需要一起覆盖?

在哈希表中,当我们向其添加对象object时,首先调用hashCode()方法计算object的哈希码,通过哈希码可以直接定位object在哈希表中的位置(一般是哈希码对哈希表大小取余)。如果该位置没有对象,可以直接将object插入该位置;如果该位置有对象(可能有多个,通过链表实现),则调用equals()方法比较这些对象与object是否相等,如果相等,则不需要保存object;如果不相等,则...

2018-07-12 10:35:16 856

原创 Java并发-等待/通知

wait(),notify()及notifyAll()注意细节1.使用wait(),notify()和notifyAll()时需要先对调用对象加锁。 2.调用wait()方法后,线程状态由RUNNING变为WAITING,并将当前线程放置到对象的等待队列。 3.notify()或notifyAll()方法调用后,等待线程依旧不会从wait()返回,需要调用notify()或notifyAl...

2018-07-11 18:31:57 296

原创 Java并发-对象监视器

对于同步块的实现使用了monitorenter和monitorexit指令,而同步方法则是依靠方法修饰符上的ACC_SYNCHRONIZED来完成的。 无论采用哪种方式,其本质是对一个对象的监视器进行获取,而对这个获取过程是排他的,也就是说统一时刻是能有一个线程获得到由synchronized所保护对象的监视器。任意线程对Object的访问,首先要先获得Object的监视器。如果获取失败...

2018-07-11 14:19:02 7603

原创 Java并发-Thread.intrrupted()与isInterrupted()与interrupt()

中断可以理解为线程的一个标识位属性,它表示一个运行中的线程是否被其他线程进行了中断操作。其他线程通过调用该线程的interrupt()方法对其进行中断操作。 线程通过方法isInterrupted()来进行判断是否被中断,也可以调用静态方法Thread.interrupted()对当前线程的中断标识位进行复位。 有一点需要注意:如果线程已经处于终结状态,即使该线程被中断过,在调用该线程对象的i...

2018-07-11 12:02:42 683

原创 Java并发-线程的状态

线程的状态线程状态变迁 Java将操作系统中的运行和就绪两个状态合并称为运行状态。

2018-07-11 10:42:11 157

原创 Java并发-类的初始化

在首次发生下列任意一种情况时,一个类或接口类型T将被立即初始化。 1)T时一个类,而且一个T类型的实例被创建。 2)T是一个类,且T中声明的一个静态方法被调用。 3)T中声明的一个静态字段被赋值。 4)T中方声明的一个静态字段被使用,而且这个字段不是一个常量字段。 5)T是一个顶级类,而且一个断言语句嵌套在T内部被执行。...

2018-07-10 20:23:55 341

原创 Java并发-final

final域的重排序规则1.在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。 2.初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。 假设一个线程A执行writer()方法,随后另一个线程B执行reader()方法。写final域的重排序规则写final域的重排序规...

2018-07-10 10:47:21 438

原创 Java并发-Concurrent包的实现

Concurrent首先,声明共享变量为volatile。 然后,使用CAS的原子条件更新来实现线程之间的同步。 同时,配合以volatile的读/写和CAS所具有的volatile读和写的内存语义来实现线程之间的通信...

2018-07-09 19:57:52 386

原创 Java并发-公平锁与非公平锁

1.公平锁和非公平锁释放时,最后都要写一个volatile变量的state。 protected final boolean tryRelease(int releases) { int c = getState() - releases; if (Thread.currentThread() != getExclusiveOwnerThre...

2018-07-01 17:47:57 206

原创 Java并发-volatile

volatile自身特性可见性:对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。 原子性:对任意单个volatile变量的读/写具有原子性,单类似于volatile++这种复合操作不具有原子性 等同于 volatile写和锁的释放有相同的内存语义;volatile读和锁的获取有相同的内存语义volatile写内存语义当写一个...

2018-07-01 16:07:01 216

redis可视化工具

redis windows mac linux可视化工具 Redis Desktop Manager 顾名思义是针对Redis 数据库开发的桌面管理芽人,它是快速,简单的Redis数据库图形化界面管理器,支持Windows、Mac和Linux平台。

2018-04-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除