并行流水线、搜索、排序
摘要:并行流水线:利用每一个流水线都有一个LickedBlockingQueue参数,将结果传递给下一个流水线 1、this.bq.take();2、经过计算;3、next.bq.add("中介");bq=每个流水线(实体类)的LickedVlockingQueue 并行搜索:利用1、数组分段,Atomi
阅读全文
posted @
2017-12-27 15:42
一个帅哥9527
阅读(242)
推荐(0)
JDK中的Future模式
摘要:RealDataJDK类: Application
阅读全文
posted @
2017-12-27 13:34
一个帅哥9527
阅读(446)
推荐(0)
Disruptor
摘要:、什么是 Disruptor 从功能上来看,Disruptor 是实现了“队列”的功能,而且是一个有界队列。那么它的应用场景自然就是“生产者-消费者”模型的应用场合了。 可以拿 JDK 的 BlockingQueue 做一个简单对比,以便更好地认识 Disruptor 是什么。 我们知道 Block
阅读全文
posted @
2017-12-25 11:29
一个帅哥9527
阅读(281)
推荐(0)
Unsafe类 AtomicReference AtomicStampedReference AtomicIntegerArray AtomicIntegerFieldUpdater vector SynchronousQueue
摘要:Java中的指针:Unsafe类 无锁的对象引用:AtomicReference 带有时间戳的对象引用:AtomicStampedReference 数组也能无锁:AtomicIntegerArray 让普通的变量也享受CAS操作带来的线程安全性 AtomicIntegerFieldUpdater
阅读全文
posted @
2017-12-12 15:50
一个帅哥9527
阅读(137)
推荐(0)
java 虚拟机 分区 及 GC
摘要:下图是JVM内存分布图 1.线程计数器,是一块较小的内存空间,用来指定当前线程执行字节码的行数,每个线程计数器都是私有的,因为每个线程都需要记录执行的行数;这里解释一下为什么每个线程都需要一个线程计数器,JVM的多线程是通过线程轮流切换分配执行时间来实现的,在任何时刻,每个处理器都只会执行一个线程中
阅读全文
posted @
2017-12-11 14:30
一个帅哥9527
阅读(371)
推荐(0)
java 虚拟机对锁对优化
摘要:Java对象头(不用记内容,只需要知道,对象头里面,会保存一些信息) 锁存在Java对象头里。如果对象是数组类型,则虚拟机用3个Word(字宽)存储对象头,如果对象是非数组类型,则用2字宽存储对象头。在32位虚拟机中,一字宽等于四字节,即32bit。(下面这个表格讲的很清楚) 长度 内容 说明 32
阅读全文
posted @
2017-12-11 11:45
一个帅哥9527
阅读(280)
推荐(1)
java 提高锁性能 方法
摘要:1、减少锁持有时间:(根据有效的条件去减少锁住的代码) 2、减少锁的颗粒度(将大面积分成小面积) ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色,
阅读全文
posted @
2017-12-08 18:12
一个帅哥9527
阅读(317)
推荐(0)
ConcurrentLinkedQueue offer() 内部方法实现
摘要:// 注意:不同的颜色,表示不同的逻辑,前面的数字,是他们各自的逻辑顺序, //这个方法没有任何的锁操作,线程安全完全是由cas操作和队列的算法来保证的,整个方法的核心是for循环,这个循环没有出口,知道尝试成功 public boolean offer(E e) { checkNotNull(e)
阅读全文
posted @
2017-12-08 14:55
一个帅哥9527
阅读(1122)
推荐(0)
Concurrent并发工具集合简介
摘要:ConcurrentHashMap: 一个高并发的HashMap CopyOnWriteArrayList : 这是一个list和ArrayList是 一族,在读多写少的场合,这个list性能非常好 (当写入当时候,先对数组进行了次复制,Arrays.copyof(oldArr,len+1),然后s
阅读全文
posted @
2017-12-08 13:44
一个帅哥9527
阅读(340)
推荐(0)
线程池的扩展 beforeExecute() afterExecute() terminaerd()
摘要:TheadPoolExector.Worker是EhreadPoolExecutor的内部类,它是一个实现了Runnable接口的类 beforeExecute() 线程执行之前调用 afterExecute() 线程执行之后调用 terminaerd() 线程池退出时候调用
阅读全文
posted @
2017-12-08 11:14
一个帅哥9527
阅读(2591)
推荐(0)
信号量semaphore 读写锁ReadWriteLock 倒计时器CountDownLatch 循环栅栏 CyclicBarrier 线程阻塞工具类LockSupport
摘要:信号量semaphore 允许多个线程同时访问 读写锁ReadWriteLock 在频繁的读写耗时中,读之间不阻塞 倒计时器CountDownLatch obj = new CountDownLatch(10) 设置预“任务”10次,obj.CountDown();次数减一 obj.await()等
阅读全文
posted @
2017-12-07 20:29
一个帅哥9527
阅读(271)
推荐(0)
ReenTrantLock可重入锁 和synchronized 内部所锁的
摘要:基于AQS的锁(比如ReentrantLock)原理大体是这样:有一个state变量,初始值为0,假设当前线程为A,每当A获取一次锁,status++. 释放一次,status--.锁会记录当前持有的线程。当A线程拥有锁的时候,status>0. B线程尝试获取锁的时候会对这个status有一个CA
阅读全文
posted @
2017-12-07 17:32
一个帅哥9527
阅读(174)
推荐(0)
integer.valueof和integer.parseint
摘要:Integer.valueOf()方法基于减少对象创建次数和节省内存的考虑,缓存了[-128,127]之间的数字。此数字范围内传参则直接返回缓存中的对象。在此之外,直接new出来。 在java中,Integer属于不可变对象,也就是对象一旦创建,就不可以修改,如果你的Integer代表1,那么它就永
阅读全文
posted @
2017-12-07 17:30
一个帅哥9527
阅读(174)
推荐(0)
守护线程
摘要:将线程转换为守护线程可以通过调用Thread对象的setDaemon(true)方法来实现。在使用守护线程时需要注意一下几点: (1) thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。你
阅读全文
posted @
2017-12-07 16:19
一个帅哥9527
阅读(155)
推荐(0)
notify wait sleep join yield yield
摘要:notify 和 wait,他们的操作必须有一个公共的锁对象(就相当于下拉框option 的分组一样) notify通知之后,也要等到当前线程运行完成,才会释放锁,wait线程才能开始拿到锁,执行(wait()方法之后的)程序 Object.wait() Object.nitify() Thread
阅读全文
posted @
2017-12-07 15:52
一个帅哥9527
阅读(130)
推荐(0)
Thread.stop()不要随意调用
摘要:如题:Thread.stop()不要随意调用 ,因为这样会强制中断线程,如果当时线程存数据未终结的时候,stop,会出现脏数据的情况, 如果想要中断,请用变量的形式进行判断 还可以用中断符号表示: public static boolean Thread.interrupted() //判断是否被中
阅读全文
posted @
2017-12-07 11:45
一个帅哥9527
阅读(649)
推荐(0)