多线程
文章平均质量分 88
挣扎在温饱线上的菜鸟
菜鸟
展开
-
互联网技术05——多线程通信wait/notify以及countDownLatch
场景带入多线程之间处理数据,但业务复杂的时候,需要各个线程间实现通信,例如线程A和B同时处理数据,线程B的后半部分(假设是第50行代码,记做B50),必须等待线程A执行某方法(假设是第80行代码,记做A80)对数据进行初加工后B再执行。A、B同时启动,当A尚未执行完A80时,B线程已经运行到了B50,这时就需要B线程在B50处等待A80执行完毕,A80执行完毕后再通知B线程继续执行。这就涉及到...原创 2018-08-15 02:44:15 · 235 阅读 · 0 评论 -
互联网技术14——Semaphore信号量
SemaPhore信号量非常适合高并发访问,在系统上线之前,要对系统访问量记性评估,当然这个肯定不是随便写的,是经过以往的经验、数据、历年的访问量,已经推广力度进行一个合理的评估,当然评估标准不能太大也不能太小。太大的话则投入的资源得不到实际的效果,会浪费资源。当评估值调小则某个时间点一个高峰值的访问量上回直接压垮系统。解决高并发关键在业务,要将业务进行划分,划分为不同的层次和模块,针对某个具...原创 2018-08-23 20:52:50 · 348 阅读 · 0 评论 -
互联网技术11——future模式和Master-Worker模式
并行设计模式属于设计优化的一部分,它是对一些常见的多线程结构的总结和抽象,与串行相比,并行程序的结构通常更为复杂,因此合理的使用并行模式在多线程开发中更具有意义,这里主要介绍future和Master-Worker两种模式。future模式future有点像商品订单。比如在网购时,当看中某一件商品时,就可以提家订单,当订单处理完成后我们在家等着送货上门即可。或者更形象的说是ajax请求的...原创 2018-08-21 01:48:20 · 718 阅读 · 0 评论 -
互联网技术16——Disruptor
学之前在看这篇博客之前,我想说的是,如果是准备入门Disruptor,建议掌握一些重要方法和特性,至于要实现哪种功能,建议掌握大致流程,以后的使用过程中慢慢去消化,如果学习任务比较多,又期望通过自己的入门式学习而全部掌握Disruptor并熟练运用时间成本有些划不来的。所以我准备有时间做一个简单归纳,这篇博客介绍了几种使用案例,同时推荐一个Disruptor的学习网站http://ifev...原创 2018-08-27 01:30:19 · 953 阅读 · 0 评论 -
互联网技术13——CountDownLatch和CyclicBarrier
CountDownLatch:countdownLatch经常用于监听某些初始化操作,等待初始化执行完毕后,再通知主线程继续工作。同步辅助类,在完成一组正在执行的操作之前,它允许一个或多个线程一直等待。实例化CountDownLatch时,需要制定唤醒次数。当线程执行了CountDownLatch.await()时,则当前线程处于阻塞的等待状态。其他线程根据执行逻辑,执行唤醒方法...原创 2018-08-22 16:39:50 · 354 阅读 · 0 评论 -
互联网技术09——并发类容器
鉴于同步类容器的并效率和非同步类容器在处理并发问题需要手动加锁的繁琐操作,专门设计了并发类容器 使用coucurrentHashMap来代替传统的hashMap,以及使用CopyOnWriteArrayList代替Vector,并发copyOnWriteArraySet,以及并发的queue,如ConcurrentLinkQuue和LinkedBlockQueue。前者是高性能的队列,后者是阻塞...原创 2018-08-17 02:38:42 · 165 阅读 · 0 评论 -
互联网技术08——同步类容器
集合容器框架关系简介:在Java集合容器框架中,主要有四大类:list、set、queue、map。期中list、set、queue都是继承了collection接口。Map本身是一个接口。 注意collection和map是一个顶层接口,而list、set、queue继承collection,分别带边数组、集合、队列这三大类容器。ArrayList和linkedList实现了list接口,...原创 2018-08-17 02:09:29 · 113 阅读 · 0 评论 -
互联网技术12——Executor框架
Executor创建线程池为了更好的控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效的控制线程。他们都在java.util.concurrent包中,是JDK并发包的核心。其中有一个比较重要的类;excutors,它扮演者线程工厂的角色,我们可以通过Executor可以创建特定功能的线程池。Exexutor创建线程池的方法:1. newFixedThreadPoo...原创 2018-08-22 03:19:12 · 154 阅读 · 0 评论 -
互联网技术04——volatile关键字
思考:1.当多个线程同时访问同一个变量时,为了避免线程问题,我们可以给其加上synchronized关键字。但是每个线程都需要等待,这就造成并发数的太低的问题。看下面代码:package com.company;/** * Created by BaiTianShi on 2018/8/14. */public class VolatileTest extends Thre...原创 2018-08-14 01:12:15 · 150 阅读 · 0 评论 -
互联网技术03——重入锁
重入锁实现细节在学习重入锁之前,我们先来了解一下可重入锁ReenTrantLock的实现细节。分两种:1.公平锁模型和非公平锁模型公平锁:把锁比作只有一个入口的井,获取锁的过程比作打水权。初始化时,state=0, 村民A获得打水权,并将state置为state+1(变为1)。此时村民B来打水,但是只有一个井口,只能生成节点进行等待。这时村民A的家人来打水,可直接获得打水权,并将state...原创 2018-08-14 00:27:35 · 119 阅读 · 0 评论 -
互联网技术10——queue队列
在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue为代表的阻塞队列。两种都是继承了Queue接口。层次图(hierarchy):(idea中 层次图快捷键:选中后(或在类中空白处)) ctrl+h )1.concurrentLinkedQueue: concurrentLinkedQueu...原创 2018-08-18 05:06:28 · 454 阅读 · 0 评论 -
互联网技术07——单例和多线程
单例模式实现方式:懒汉模式 饿汉模式 静态内部类 双重检查第一种,懒汉模式,顾名思义,就是什么时候需要,我什么时候创建,示例代码:package com.company;/** * Created by BaiTianShi on 2018/8/16. */public class SingleModal { private static SingleModal...原创 2018-08-16 02:54:36 · 105 阅读 · 0 评论 -
互联网技术06——使用wait/notify模拟Quene
BlockingQuene,Block即阻塞队列,在这里我们试着实现LinkBlockQuene的put和take两个方法put:把数据放入队列中,如果队列没空间,则一直阻塞,直到quene中有空间剩余,然后将数据放入队列中。take:从quene中取第一个(FIFO)元素,如果队列中没有元素,则阻塞,直到队列有数据进来,然后继续执行取操作。代码如下package com.com...原创 2018-08-16 01:26:01 · 123 阅读 · 0 评论 -
互联网技术02——脏读
脏读:当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没提交到数据库中,这时另一个事务也访问这个数据,然后使用了这个数据。对于多线程的同步和异步方法,如果考虑不周,就有可能发生脏读的错误。例子:package com.company;/** * Created by BaiTianShi on 2018/8/13. * 脏读 */public class D...原创 2018-08-13 02:30:00 · 551 阅读 · 0 评论 -
互联网技术01——线程基础
线程安全的概念:当多个线程访问某一个类(对象或方法)时,这个类始终能表现出正确的行为synchronized :可以加在任意对象及方法上,加上synchronized的这段代码称为“互斥区”或“临界去” 实例 1. 多个线程一个锁:package com.company;/** * Created by BaiTianShi on 2018/8/13. */...原创 2018-08-13 00:46:22 · 598 阅读 · 2 评论 -
互联网技术15——ReentrantLock之重入锁、读写锁、非公平锁
synchronized关键字可以实现线程之间的同步互斥给工作,Lock对象锁是一种完成同步互斥工作更优秀的机制,在1.6之后,对synchronized进行了优化,虽然效率上有所提升,但是在灵活度上仍然不如Lock对象。比如嗅探锁定,夺路分支等功能。重入锁:在需要同步的代码部分添加锁定,但是最后一定不要忘记了释放锁,否则会造成锁无法释放,其他线程不能执行。package com.c...原创 2018-08-24 00:51:45 · 522 阅读 · 0 评论