![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发
文章平均质量分 93
明成天下
做个技术达人
展开
-
并发包下类总结
synchronized 是在jvm底层的实现的锁, 互斥排他锁可以锁定对象实例方法,必须锁定同一个实例静态方法,相当于锁定类,可以传入不同实例wait()调用wait()之前需要拿到当前对象的监视器(也是锁),执行后释放对象的监视器notify()调用notify()之前也需要拿到对象的监视器java内存模型Java内存模型定义了程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出这样的底层细节。此处变量包括实例字段,静态字段和构成数组对象的元素,但不包括...原创 2020-12-23 12:50:13 · 101 阅读 · 0 评论 -
RPC解释
RPC原创 2020-12-22 17:55:03 · 65 阅读 · 0 评论 -
park()和unPark()和Object wait 和notify区别
LockSupport的park()和unPark()1、LockSupport中的park() 和 unpark() 的作用分别是阻塞线程和解除阻塞线程2、对象为线程Object wait 和notify1、因为wait需释放锁,所以必须在synchronized中使用(没有锁时使用会抛出IllegalMonitorStateException)2、notify也要在synchronized使用,并且应该指定对象3、synchronized(),wait(),notify() 对象必须原创 2020-12-22 17:52:11 · 222 阅读 · 0 评论 -
ForkJoin的用法
1.什么是ForkJoin --使用了分治算法Fork/Join是java7提供的并行执行任务框架1)把大任务分割为若干个小人物2)汇总每个小任务结果3)得到大任务结果的框架2.工作密取(work-stealIng)使得若一个工作线程的task队列为空,没有任务可以执行时,从其他工作线程中获取任务主动执行。目的:充分利用线程进行并行计算,减少线程竞争。3.类构架图...原创 2020-12-22 17:50:03 · 376 阅读 · 0 评论 -
Synchronized 详解
Synchronized 详解锁定是同一个对象锁是如何存储的保存了锁的信息Synchronize锁优化原创 2020-12-22 17:49:23 · 100 阅读 · 0 评论 -
java并发编程实战
1.及时失败(fail-fast):迭代器发现容器在迭代过程中被修改时,就会抛出一个ConcurrentModificationException异常原创 2020-12-22 17:47:47 · 104 阅读 · 0 评论 -
AtomicIntegerFieldUpdater要点总结
1.更新器更新的必须是int类型变量,不能是其包装类型。2.更新器更新的必须是volatile类型的,确保线程之间共享变量时的立即可见性。3.变量不能是static的,必须是实例变量。因为Unsafe.objectFieldOffset()方法不支持静态变量(CAS操作本质上是通过对象实例的偏移量来直接进行赋值)。4.更新器只能修改它可见范围的变量,因为更新器是通过反射来得到这个变量,如果变量不可见就会报错。如果要更新的是包装类型,那么可以使用AtomicReferenceFieldU.原创 2020-06-03 14:36:11 · 206 阅读 · 0 评论 -
PriorityQueue源码分析
PriorityQueue分析常量插入操作 add()poll() 获取并删除实例常量/** 默认初始化队列长度 */ private static final int DEFAULT_INITIAL_CAPACITY = 11; /** * 优先队列表示为一个平衡二叉堆:queue[n]节点的两个子节点 * 是queue[2*n+1]和queue[2*(n+1)]。优先队列通 * 过comparator保持顺序,或当comparator为null时通过 * 元素的自然顺序,对于原创 2020-05-09 18:13:11 · 149 阅读 · 0 评论 -
简单的死锁例子
package com.xmg.lock;/*** @author 作者 : xuminggang* @version 创建时间:2020年8月24日 上午11:41:33* * * 简单的死锁例子,容易发生死锁*/public class SimpleDeadLock { private final Object left = new Object(); private final Object right = new Object(); public void leftRig.原创 2020-08-24 11:45:24 · 96 阅读 · 0 评论 -
根据ReentrantLock和Condition创建阻塞队列
package com.test.day;import java.util.ArrayList;import java.util.List;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;/** * 写一个自定义阻塞队列,根据ReentrantLock和Condition */public class MyBlockingQueue<E> {原创 2020-07-05 11:20:48 · 143 阅读 · 0 评论 -
CountDownLatch的理解和例子
CountDownLatch内部通过共享锁实现。在创建CountDownLatch实例时,需要传递一个int型的参数:count,该参数为计数器的初始值,也可以理解为该共享锁可以获取的总次数。当某个线程调用await()方法,程序首先判断count的值是否为0,如果不会0的话则会一直等待直到为0为止。当其他线程调用countDown()方法时,则执行释放共享锁状态,使count值 - 1。当在创建CountDownLatch时初始化的count参数,必须要有count线程调用countDown方原创 2020-07-01 22:12:42 · 227 阅读 · 0 评论 -
java 多线程四种方式
1extends Thread2 implements Runnable3implements Callable<String>有返回值package com.nf147.Constroller;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionExceptio...原创 2019-08-23 11:57:58 · 69 阅读 · 0 评论 -
java 锁的优化
1.减小锁持有时间2.减小锁粒度(1)将大对象拆成小对象,大大增加并行度,降低锁竞争(2)偏向锁,轻量级锁成功率提高(3)ConcurrentHashMap3.锁分离(1)ReadWriteLock(2)读写分离,只要操作互不影响锁就可分离LinkedBlockingQueue4.锁粗化如果对同一个锁不停的进行请求,同步和释放,本身也消耗系统宝贵资源...原创 2019-08-13 11:38:51 · 125 阅读 · 0 评论 -
java 生产者和消费者模式代码BlockingQueue
package com.xmg;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;public class ProducerConsumer { private int count = 0; private BlockingQueue<...原创 2020-02-24 15:14:33 · 94 阅读 · 0 评论 -
线程池分布面试
/** * 与玩家角色绑定的线程池,即根据玩家角色的id号{@link PlayerCharacter#getTemplateId()} * ,固定的操作总在同一个线程池中运行 */ private final ExecutorService[] charBindExecutors; /** 不与玩家角色绑定的线程池 */ private fi...原创 2019-10-11 17:00:20 · 84 阅读 · 0 评论 -
JDK的ByteBuffer和Netty的ByteBuf对比
Netty的ByteBuf采用读写索引分离的策略(readerIndex与writerIndex),一个初始化(里面尚未有任何数据)的ByteBuf的readerIndex与writerIndex都为0。当读索引与写索引处于同一个位置时,如果我们继续读取,就会抛出IndexOutofBoundsException对于ByteBuf的任何读写操作都会分别单独维护读索引与写索引。maxCapac...原创 2020-03-26 11:08:58 · 194 阅读 · 0 评论 -
java的nio中ByteBuffer
ByteBuffer二、NIO进行文件读取所涉及的步骤:1.从FileInputStream对象获取到Channel对象(FileChannel对象)2.创建buffer3.将数据从channel读取到buffer对象中。------------三、NIO中的ByteBuffer的四个属性1.position :当前正在读或者正在写的位置2.limit :...原创 2020-03-20 11:20:29 · 167 阅读 · 0 评论 -
java如何停止一个正在运行的线程
停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作。停止一个线程可以用Thread.stop()方法,但最好不要用它。虽然它确实可以停止一个正在运行的线程,但是这个方法是不安全的,而且是已被废弃的方法。在java中有以下3种方法可以终止正在运行的线程:使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。 使用stop方法强行终止,但是不推荐这个方法,因为stop和suspend及resume一样都是过期作废的方法。 使用interrupt方法中断线程。1. 停原创 2020-06-23 10:48:50 · 1438 阅读 · 0 评论 -
FutureTask源码分析
1.7个状态原创 2020-06-14 19:54:51 · 97 阅读 · 0 评论 -
FutureTask源码分析-重点方法
FutureTask源码分析1.FutureTask的7中状态转换2.重点方法分析1.get()2.run()3 cancel()3 举例代码1.FutureTask的7中状态转换2.重点方法分析1.get()/** * @throws CancellationException {@inheritDoc} */ public V get() throws InterruptedException, ExecutionException { int s = state; /原创 2020-06-14 19:54:05 · 169 阅读 · 0 评论 -
ThreadPool详解--线程池连环问
参考链接:https://www.cnblogs.com/thisiswhy/p/12690630.html线程池执行的流程线程池的默认的创建a) Executors.newSingleThreadPool() —单线程的线程池b) Executors.newFixedThreadPool(int) ----固定大小的线程池c) Executors.newCachedThreadPool() -----可缓存的线程池(回收60秒不执行的任务)d) Sched原创 2020-05-08 17:56:30 · 166 阅读 · 0 评论 -
ThreadPool详解--线程池连环问
参考链接:https://www.cnblogs.com/thisiswhy/p/12690630.html线程池执行的流程 线程池的默认的创建Executors.newSingleThreadPool() ---单线程的线程池 Executors.newFixedThreadPool(int) ----固定大小的线程池 Executors.newCachedThreadPool() -----可缓存的线...原创 2020-12-22 17:52:40 · 106 阅读 · 0 评论 -
ScheduledFuture 例子 API代码
以下是一个带方法的类,它设置了 ScheduledExecutorService ,在 6秒内每 1秒钟蜂(beep)鸣一次:import static java.util.concurrent.TimeUnit.*;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutor...原创 2019-09-04 18:07:16 · 1419 阅读 · 0 评论 -
BIO、NIO、AIO
BIO-会产生阻塞NIO-非阻塞单线程模型-轮询模式--相当于selector负责client的连接并负责client的读写package com.xmg.nio;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import...原创 2020-06-25 08:44:44 · 101 阅读 · 0 评论 -
ThreadGroup 源码解析
ThreadGroup 实现了Thread.UncaughtExceptionHandler内部定义的变量为 //父类ThreadGroup private final ThreadGroup parent; String name; //名字 int maxPriority; //最高优先级 boolean destroyed; //是...原创 2019-02-20 15:16:30 · 200 阅读 · 0 评论 -
java线程池
Excutor的例子中的ArrayDeque 双端队列 Executor 接口Executors 创建线程池的工厂方法创建ExecutorService方法 创建ScheduledExecutorService的方法 创建ThreadFactory的方法 创建并返回非闭包形式的Callable的方法ThreadPoolExecutor 线程池解决两个不同问题:执行...原创 2019-02-20 15:06:02 · 78 阅读 · 0 评论 -
java 锁 ReentrantLock源码分析
public class ReentrantLock implements Lock, java.io.Serializable内部实现三个类,Sync,FairSync,NonfairSync默认构造函数,创建非公平锁//默认构造函数,创建非公平锁public ReentrantLock() { sync = new NonfairSync(); }...原创 2019-02-21 18:31:33 · 132 阅读 · 0 评论