
并发编程与多线程
文章平均质量分 77
发奋小青年
这个作者很懒,什么都没留下…
展开
-
Java中的锁
1. Lock接口一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了(通过synchronized块或者方法所提供的)隐式获取释放锁的便捷性,但是却拥...原创 2020-03-08 19:49:11 · 269 阅读 · 0 评论 -
java多线程
用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。很多人都对其中的一些概念不够明确,如同步、并发等等,让我们先建立一个数据字典,以免产生误会。多线程:指的是这个程转载 2017-07-12 23:23:03 · 169 阅读 · 0 评论 -
内存屏障
锁在保证可见性的时候,会有两个操作刷新处理器缓存(获得锁)和冲刷处理器缓存(释放锁)。前一个动作保证了:当前线程能够读取到前一个线程对共享数据的更新,后一个动作保证了:该锁的所有持有线程对这些数据所做的更新对该锁的所有持有线程可见。而这两个动作的实现是通过:内存屏障完成的。什么是内存屏障? 内存屏障是一种CPU指令,用于控制特定条件下的重排序...原创 2018-07-23 20:25:49 · 401 阅读 · 0 评论 -
CountDownLatch闭锁
什么是闭锁闭锁的作用相当于一扇门:用来同步一个或多个任务,强制他们等待由其他任务执行的一组操作完成。在闭锁到达结束状态之前,这扇门一直是关闭的,并且没有任务线程能通过。直到闭锁达到结束状态时,这扇门才会打开,并且允许所有的线程通过。当闭锁到达结束状态后,这扇门将永远保持打开状态,因为闭锁将不会在改变其状态。CountDownLatch是一种灵活的闭锁实现,它的内部提供了一个计数器,该计数器...转载 2018-10-11 16:23:04 · 493 阅读 · 0 评论 -
线程池ThreadPoolExecutor
为什么使用线程池,线程池有什么优势?因为线程的创建和销毁都会伴随着系统的开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率。而且线程并发数量过多,抢占系统资源从而导致阻塞。所以需要对线程进行简单的管理,比如:延时执行,定时循环执行,这就需要线程池来进行管理。线程池有以下好处:1、降低资源消耗; 2、提高响应速度; 3、提高线程的可管理性。Java1.5中引入的Executo...原创 2018-10-11 18:43:44 · 307 阅读 · 0 评论 -
Condition接口
Conditionwait()、notify()与synchronized配合可以实现等待通知,condition和Lock配合同样也可以实现等待通知,但是两者之前还是有区别的。Condition定义了等待/通知两种类型的方法,当前线程调用这些方法时,需要提前获取到Condition对象关联的锁,Condition对象是由Lock对象创建出来的(Lock.newCondition),换句话说,...原创 2018-10-09 22:50:36 · 1184 阅读 · 0 评论 -
happen-before原则
happen-before是JMM最核心的概念,所以在了解happen-before原则之前,首先需要了解java的内存模型。JMM内存模型 java内存模型是共享内存的并发模型,线程之间主要通过读-写共享变量来完成隐式通信。java中的共享变量是存储在内存中的,多个线程由其工作内存,其工作方式是将共享内存中的变量拿出来放在工作内存,操作完成后,...原创 2018-10-09 23:27:30 · 36946 阅读 · 7 评论 -
线程之间的协作——Exchange
Exchanger作用      Exchanger是个线程间协作的工具类。Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过 exchange*() 方法交换数据,如果第一个线程先执行exchange()方法,它会一直等待第二个线程也执行exchange方法,当两个线原创 2018-10-10 15:01:32 · 340 阅读 · 0 评论 -
CyclicBarrier栅栏
CyclicBarrier有什么作用?在现实生活中,在进行某个活动前需要等待人全部都齐了才开始。例如吃饭时要等全家人都上座了才动筷子,旅游时要等全部人都到齐了才出发,比赛时要等运动员都上场后才开始。栅栏就可以很好的模拟这类场景,利用CyclicBarrier类可以实现一组线程相互等待,当所有线程都到达某个屏障点后再进行后续的操作。下图演示了这一过程。 CyclicBarrier...原创 2018-10-22 17:12:19 · 279 阅读 · 0 评论