随笔分类 -  并发编程

多线程只是为了达到高并发目的
摘要:一、 阅读全文
posted @ 2019-10-17 17:31 wmqiang 阅读(78) 评论(0) 推荐(0)
摘要:一、concurentMap 1、数据结构,分段数组segment不扩容,里面的table扩容,每次翻倍,table中放的是entry链表的头地址; 2、初始化 segment和table的长度都是2的幂次方,方便位运算,位运算扩容之后可以保证原先的元素排列不变; 用于定位元素所在segment。s 阅读全文
posted @ 2019-10-17 13:19 wmqiang 阅读(840) 评论(0) 推荐(0)
摘要:一、Hash 1、md5是hash算法,不可逆,还原的是暴力穷举的方式解析的;加盐之后穷举也不能还原; 2、压缩映射会有重复,即哈希冲突; 二、ConcurrentHashMap 1、putIfAbsent,保证线程安全 复合操作合成一个原子操作 原理: 2、位运算 正数最高位位0,负数为1; 3、 阅读全文
posted @ 2019-10-15 23:05 wmqiang 阅读(478) 评论(0) 推荐(0)
摘要:一、node概念 1、当线程获取锁失败时,会被打包成一个node放到同步队列中 2、node属性 当线程获取锁失败时,会被打包成一个node放到同步队列中,所以node属性中有一个thread属性; 3、condition中有一个等待队列 二、同步状态获取和释放源码实现 for(;;)自旋,编译后比 阅读全文
posted @ 2019-10-15 11:15 wmqiang 阅读(167) 评论(0) 推荐(0)
摘要:一、模板方法模式 父子类多态,父类中用一个方法调用执行所有所需要的方法; 父类: 子类: 主线程执行时候调用父类的模板方法; 二、AQS思想 sync都是独占锁,lock显示锁也是,只有读写锁是共享锁 三、AQS自己实现锁 1、继承AbstractQueuedSynchronizer,需要覆盖重写几 阅读全文
posted @ 2019-10-15 09:58 wmqiang 阅读(164) 评论(0) 推荐(0)
摘要:一、内置锁sync 和 显示锁lock概念 1、synv锁又叫内置锁,不能中断,拿不到无限等待即阻塞; java自带关键字; 隐式可重入; 重入锁:锁对应对象要多次调用对应方法,如递归 2、 lock的lockinterruptiply意思是可中断的;语言层面的接口; 其实现类reentrantlo 阅读全文
posted @ 2019-10-14 22:50 wmqiang 阅读(377) 评论(0) 推荐(0)
摘要:1、有返回值,用futuretask包装,当作runnable传回创建线程; 2、代码实现 主线程: cancel(true) 中断线程; 阅读全文
posted @ 2019-10-14 16:49 wmqiang 阅读(139) 评论(0) 推荐(0)
摘要:一、概念, 基于处理器指令,把比较和交换合成一个指令完成,保证了原子性; 因为是针对一个内存地址值的,一个内存地址指向一个变量,所以只对一个共享变量能保证原子性; 二、原子操作类 锁只有synchronized和显示锁; cas不是锁,是处理器指令原子操作; 多线程下的cas原子操作,只会有一个线程 阅读全文
posted @ 2019-10-14 15:11 wmqiang 阅读(516) 评论(0) 推荐(0)
摘要:一、countDownLatch 1、计数器,调用await的线程等待计数器的扣除点都扣完了为0时候会继续往下执行; 1.2专门的初始化线程类: 1.2业务线程类: 1.3主线程最大最用是初始化了几个线程: 一个线程可以扣除多个扣除点; 二、CyclicBarrier 1、两个概念区别,Cyclic 阅读全文
posted @ 2019-10-14 11:02 wmqiang 阅读(100) 评论(0) 推荐(0)
摘要:一、fork/join框架 1、分而治之和工作密取概念 工作密取就是A干完了帮B线程干点活,并把结果返回给B; 工作密取时候,A从后面开始拿任务,B从前面,避免资源竞争; 2、代码实现,根据这个框架的标准范式使用 主线程 pool.invoke是同步用法; 3、异步用法 主线程: 异步,主线程执行中 阅读全文
posted @ 2019-10-13 22:48 wmqiang 阅读(153) 评论(0) 推荐(0)
摘要:一、wait、notife、notifyAll 1、 2、 notify就发一个信号,随机给正在wait的线程中一个,不传递; notifyAll发送给所有正在wait的线程信号; 条件允许,使用notifyAll,线程类中重写的run方法做好逻辑判断,使得创建出来的线程不会产生冲突就行; 3、实现 阅读全文
posted @ 2019-10-13 21:03 wmqiang 阅读(132) 评论(0) 推荐(0)
摘要:锁:JVM会在每个对象头上都会有个锁的标志位; 一、synchronized内置锁,java自带关键字,也叫内置锁 二、volatile 1、可见性是保证每次get时候会从主内存刷新一次值到运行内存中,自己运行内存中的值值为无效;set设置值的时候也会同步到主内存中让其他线程可以看到修改; 因为ag 阅读全文
posted @ 2019-10-13 16:42 wmqiang 阅读(498) 评论(0) 推荐(0)
摘要:一、概念和开启线程和中断线程 1、基本概念 上下文切换就是cpu调度分配时间片用在了在线程状态切换了额,越少越好,自旋锁的意义; 2、callable接口方式和futureTask结合,获取返回值,和runable的区别就是返回值; 3、协作式,interrupt不会立即让线程停止,需要慢慢的释放资 阅读全文
posted @ 2019-10-13 15:17 wmqiang 阅读(130) 评论(0) 推荐(0)
摘要:一、使用匿名内部类的匿名对象创建线程和Lambda表达式写法 Lambda表达式写法不用去定义一个Runable接口的实现类; 二、方法入参是一个接口或者接口的实现类 三、对某个类的一些对象实例进行排序 其中,数组创建时候使用的是静态初始化,里面存放的对象是匿名对象; Lambda表达式写法: 四、 阅读全文
posted @ 2019-08-18 18:05 wmqiang 阅读(177) 评论(0) 推荐(0)
摘要:一、线程池原理 二、线程池使用 三个任务两个线程; 阅读全文
posted @ 2019-08-17 17:21 wmqiang 阅读(129) 评论(0) 推荐(0)
摘要:相当于sleep( 5000 ) , 效果一样; 阅读全文
posted @ 2019-04-07 20:45 wmqiang 阅读(487) 评论(0) 推荐(0)
摘要:其中,多个线程必须使用的是同一个锁对象; 等待 wait 和唤醒 notify 的也就是这个对象监视器及锁对象的正在等待的单个线程,若多个,谁等的时间长唤醒谁; 代码实现: 从顾客消费者来买包子开始: 使用的是线程类Thread类的匿名内部类的匿名对象方式创建线程; 同步代码块的方式实现线程同步即解 阅读全文
posted @ 2019-04-07 20:38 wmqiang 阅读(233) 评论(0) 推荐(0)
摘要:线程状态概述: TIMED_WAITING: BLOCKED: 以下是重点: WAITING: 等待唤醒机制即线程通信:Object.wait() 和 Object.notify 阅读全文
posted @ 2019-04-07 20:18 wmqiang 阅读(168) 评论(0) 推荐(0)
摘要:线程间通信——等待唤醒机制,避免争夺同一资源; 锁对象可以是任意Object类的子类对象; 包子案例: 包子案例——生产者和消费者: 代码实现: 关键就是在于两个线程使用同一个锁对象! 这边是主程序调用这两个线程时候传入的同一个对象! 包子铺线程类——生产者: 其中,baozi类作为成员变量,并且重 阅读全文
posted @ 2019-04-07 20:13 wmqiang 阅读(359) 评论(0) 推荐(0)
摘要:线程同步即解决线程安全问题的第三种方式——使用lock锁 代码实现: 其中,ReentrantLock是lock接口的实现类,这边是使用多态创建,访问成员方法时,编译看左,运行看右; ReentrantLock对象要在方法体外面即成员位置就创建; 优化代码,将释放锁写道try/catch的final 阅读全文
posted @ 2019-04-07 17:41 wmqiang 阅读(254) 评论(0) 推荐(0)