随笔分类 -  java 并发

1 2 下一页

摘要:1、概念 Exchanger(交换者)是一个用于线程间协作的工具类。 Exchanger 用于进行线程的数据交换。 Exchanger 提供一个同步点,在这个同步点,两个线程 可以交换 彼此的数据 只能是2个线程,他不支持更多的线程之间互换数据 当线程A调用Exchange对象的exchange() 阅读全文

posted @ 2020-08-20 10:12 shumeigang 阅读(151) 评论(0) 推荐(0)

摘要:概念 Semaphore是java并发包里面的一个工具类,我们限制可以访问某些资源的线程数目就可以使用Semaphore了 Semaphore:可理解为允许线程执行信号的池子,池子中放入多少个信号就允许多少线程同时执行。 Semaphore的作用:限制线程并发的数量 注意:的是 Semaphore 阅读全文

posted @ 2020-08-19 16:36 shumeigang 阅读(202) 评论(0) 推荐(0)

摘要:1、概念 CyclicBarrier可循环使用的屏障,让一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障时屏障才会开门 ,所有被屏障拦截的线程才会继续运行。 CyclicBarrier和CountDownLatch一样,都是关于线程的计数器。 2.常用的方法: CyclicBarrier(in 阅读全文

posted @ 2020-08-19 15:00 shumeigang 阅读(159) 评论(0) 推荐(0)

摘要:背景 Java从JDK1.5开始提供了java.util.concurrent.atomic包,这个包中的原子操作类提供了一种用法简单,性能高效,线程安全地更新一个变量的方式。在Java并发比编程中,要想保证一些操作不被其他线程干扰,就需要保证原子性 1、原子更新基本类型类: AtomicBoole 阅读全文

posted @ 2020-08-19 09:38 shumeigang 阅读(186) 评论(0) 推荐(0)

摘要:Fork/Join框架介绍 Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务 结 果 后得到大任务结果的框架。Fork/Join框架要完成两件事情: 1.任务分割:首先Fork/Join框架需要把大的任务分割成足够小的子任务, 阅读全文

posted @ 2020-08-19 09:37 shumeigang 阅读(146) 评论(0) 推荐(0)

摘要:一.什么是阻塞队列? 阻塞队列是一个在队列基础上又支持了两个附加操作的队列。这两个附加的操作支持 阻塞和插入和移除方法。 支持阻塞的插入方法:队列满时,队列会阻塞插入元素的线程,直到队列不满。 支持阻塞的移除方法:队列空时,获取元素的线程会等待队列变为非空。 二.阻塞队列的应用场景 阻塞队列常用于生 阅读全文

posted @ 2020-08-19 09:36 shumeigang 阅读(312) 评论(0) 推荐(0)

摘要:什么是ConcurrentHashMap?ConcurrentHashMap 是java集合中map的实现,是哈希表的线程安全版本,即使是线程安全版本, ConcurrentHashMap的性能也十分可观。但是在不同的jdk版本中,其实现也不一样,本文主要基于jdk1.8版本的实现讨论。 Concu 阅读全文

posted @ 2020-08-19 09:35 shumeigang 阅读(748) 评论(0) 推荐(0)

摘要:为什么要用join()方法 如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是 主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了 join() 的作用 让父线程等待子线程结束之后才能继续运行 阅读全文

posted @ 2020-08-14 10:51 shumeigang 阅读(213) 评论(0) 推荐(0)

摘要:Condition介绍 Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者在使用方式以及功能特性上还是有差别的。Object上的监视器只有一个等待队列,但是Condition上可以有多个等待队列 Condition是对象监视器的替代品,拓展了 阅读全文

posted @ 2020-08-14 10:50 shumeigang 阅读(268) 评论(0) 推荐(0)

摘要:LockSupport 当需要阻塞或唤醒一个线程的时候,都会使用LockSupport工具类来完成相应 工作。LockSupport定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功 能,而LockSupport也成为构建同步组件的基础工具。 LockSupport 是用来创建锁和其他 阅读全文

posted @ 2020-08-13 18:22 shumeigang 阅读(113) 评论(0) 推荐(0)

摘要:ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的ThreadLocal变量 ThreadLocal提供了线程的局部变量,每个线程都可以通过set()和get()来对这个局部 阅读全文

posted @ 2020-08-13 18:20 shumeigang 阅读(107) 评论(0) 推荐(0)

摘要:Lock接口 Lock不是Java中的关键字而是 java.util.concurrent.locks 包中的一个接口。下面我们简单介绍一下Lock接口。 一、Lock接口简介 Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有 阅读全文

posted @ 2020-08-13 18:19 shumeigang 阅读(175) 评论(0) 推荐(0)

摘要:什么是等待/通知机制? 多个线程之间也可以实现通信,原因就是多个线程共同访问同一个变量。但是这种通信机制不是 “等待/通知” ,两个线程完全是主动地读取一个共享变量。简单的说,等待/通知机制就是一个【线程A】等待,一个【线程B】通知(线程A可以不用再等待了)。 场景:一个线程修改了一个对象的值,而另 阅读全文

posted @ 2020-08-13 09:52 shumeigang 阅读(275) 评论(0) 推荐(0)

摘要:方法介绍 suspend():暂停任务 resume():恢复任务 stop():停止任务 stop() 当调用stop()方法时会发生两件事: 即刻停止run()方法中剩余的全部工作,包括在catch或finally语句中,并抛出ThreadDeath异常(通常情况下此异常不需要显示的捕获),因此 阅读全文

posted @ 2020-08-13 09:46 shumeigang 阅读(266) 评论(0) 推荐(0)

摘要:interrupt() 其作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程),但实际上只是给线程设置一个中断标志,线程仍会继续运行。 该方法经常用来“吵醒休眠的线程“。 当一些线程调用sleep() 方法处于休眠状态时,一个占有CPU资源的线程可以让休眠的线程 阅读全文

posted @ 2020-08-13 09:37 shumeigang 阅读(206) 评论(0) 推荐(0)

摘要:final域的内存语义 对于final域,编译器和处理器要遵守两个重要的重排序规则: 1:在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。 2:初次读一个包含final域的对象的引用,与随后初次都这个final域,这两个操作之间不能重排 阅读全文

posted @ 2020-08-13 09:31 shumeigang 阅读(126) 评论(0) 推荐(0)

摘要:synchronized 的实现原理与应用 synchronized 称为 重要级锁 Synchronized的作用主要有三个: 原子性:确保线程互斥的访问同步代码;可见性:保证共享变量的修改能够及时可见,其实是通过Java内存模型中的 “对一个变量unlock操作之前,必须要同步到主内存中;如果对 阅读全文

posted @ 2020-08-13 09:29 shumeigang 阅读(158) 评论(0) 推荐(0)

摘要:锁 1 公平锁/非公平锁 公平锁:多个线程申请获取同一个锁,按照线程的申请顺序,排队获取锁。公平锁的好处是等待的线程不会被饿死,相应的缺陷 就是整体吞吐量很低、效率很低,使用new ReentrantLock(true)可以构造一个公平锁。 非公平锁:多个线程申请获取同一个锁,获取锁的顺序不按照申请 阅读全文

posted @ 2020-08-06 19:29 shumeigang 阅读(114) 评论(0) 推荐(0)

摘要:sleep和wait的区别:1、sleep是Thread的静态方法,wait是Object的方法,任何对象实例都能调用。2、sleep不会释放锁,它也不需要占用锁。wait会释放锁,但调用它的前提是当前线程占有锁(即代码要在synchronized中)。3、它们都可以被interrupted方法中断 阅读全文

posted @ 2020-08-06 19:27 shumeigang 阅读(890) 评论(0) 推荐(0)

摘要:Volatile 变量:一种同步的弱形式。它确保参一个变量的更新以可预见的方式告知其他的线程。1 Volatile 变量的操作不会加锁。也就不会引起执行线程的阻塞2 Volatile 变量地可见性的影响所产生的价值远远高于变量本身3 加锁可以保证可见性与原子性,volatile 变量只能可见性 4  阅读全文

posted @ 2020-08-06 19:25 shumeigang 阅读(125) 评论(0) 推荐(0)

1 2 下一页

导航