多线程
ai_xiangjuan
这个作者很懒,什么都没留下…
展开
-
Java synchronized 对象锁和类锁的区别
1.1 synchronized加到static方法是对整个类加锁 public synchronized static void doLongTimeTaskA() { System.out.println("name = " + Thread.currentThread().getName() + ", begain"); try { ...原创 2018-05-09 23:18:01 · 411 阅读 · 0 评论 -
linux 线程切换
1.什么引起线程切换时间片轮转线程阻塞线程主动放弃时间片原创 2018-10-11 22:35:21 · 1318 阅读 · 0 评论 -
BlockingQueue 、BlockingDeque 接口介绍
1. BlockingQueue 接口介绍 接口名 介绍 add(E e) 如果队列没有空间。则抛出异常 boolean offer(E e) 没有多余空间。则返回false void put(E e) 没有多余的空间,则进行等待 boolean offer(E e, long timeout, TimeUnit unit) 没...原创 2018-04-30 23:26:34 · 2818 阅读 · 1 评论 -
FutureTask源码分析
1.使用场景1.1 执行多任务计算利用FutureTask和ExecutorService,可以用多线程的方式提交计算任务import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.Execut...原创 2018-06-10 12:42:37 · 317 阅读 · 0 评论 -
线程并发类实现工具--LockSupport
1.介绍LockSupport是创建锁及其他线程同步工具的基本工具类。对一个线程调用park()方法判断是否有许可,如果有,立即返回执行。否则继续阻塞。对一个线程调用unpark()方法时:如果当前没有许可,则产生一个许可。否则不再产生许可(许可不可增加)。与Thread.suspend和Thread.resume方法的比较 1. park()方法将返回如果线程被中断(Unin...原创 2018-06-02 15:36:18 · 204 阅读 · 0 评论 -
线程并发类实现工具--unsafe
1.介绍Unsafe类提供了直接操控内存和底层线程的工作。Unsafe类是在sun.misc包下,不属于Java标准。但是很多Java的基础类库,包括一些被广泛使用的高性能开发库都是基于Unsafe类开发的,比如Netty、Cassandra、Hadoop、Kafka等。Unsafe类在提升Java运行效率,增强Java语言底层操作能力方面起了很大的作用。2.线程的挂起与恢复2...原创 2018-06-02 15:33:21 · 391 阅读 · 0 评论 -
java 多线程访问共享变量不安全因素分析
java 多线程,多线程原理,重排序,jvm 内存区域原创 2017-07-09 20:12:41 · 369 阅读 · 0 评论 -
java 中如何避免多线程不安全
在java应用中,我们时常要用到java中的多线程。如何实现一个正确的多线程。本文提供了指导。原创 2017-07-09 21:23:10 · 2287 阅读 · 0 评论 -
ThreadLocal 及InheritableThreadLocal 源码分析
ThreadLocalThreadLocal是java多线程编程中非常重要的一个类。ThreadLocal存放的变量只能由相应的线程进行访问,即ThreadLocal为每个线程存放一个变量的副本。 下面对ThreadLocal进行源码分析Thread 类查看Thread类的源代码,可以看到Thread类中有个ThreadLocal.ThreadLocalMap threa...原创 2017-07-10 20:53:16 · 254 阅读 · 0 评论 -
java 自旋锁
1.介绍从jdk1.5 后java实现了各种锁优化技术,如适应性自旋、锁消除、锁粗化、轻量级锁和偏向锁等。2.自旋锁与自适应锁2.1 为什么需要自旋锁在互斥实现的时候,互斥同步对性能最大的影响是阻塞的实现,挂起线程和恢复线程的操作都需要转入内核态完成。这些操作给系统的并发性能带来了很大的压力。在现实中,很多共享数据的锁定状态只会持续很短的一段时间,为了这段时间去挂起和恢复线...原创 2018-05-30 22:48:08 · 858 阅读 · 0 评论 -
线程安全容器
1.同步容器类同步容器类包括Vector和Hashtable,或者通过Collections.synchronizedXxx等工长方法创建的。这些实现线程安全的方式:将他们的状态封装起来,并对每个共有方法加锁。1.1 同步容器类的问题复合操作:迭代(反复访问元素,直到遍历完容器中所有元素)、条件运算(若没有则添加)。在其他线程并发地修改容器时,它们可能会变现出意料之外的行为。如...原创 2018-05-08 23:12:00 · 957 阅读 · 0 评论 -
AbstractQueuedSynchronizer 源码分析
AbstractQueuedSynchronizer 多线程源码分析原创 2017-07-16 21:03:26 · 267 阅读 · 0 评论 -
CAS:乐观锁实现
CAS,ABA问题,CAS底层实现原创 2017-10-15 23:17:43 · 617 阅读 · 0 评论 -
Thread yield和join
1. yield1.1 yield介绍yield()应该做的是让当前运行线程回到可运行状态,以==允许具有相同优先级或者更高优先级的其他线程获得运行机会==。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。结论:yield()从未导致线程转到等待/睡眠/阻塞状态。在...原创 2018-06-03 22:55:32 · 219 阅读 · 0 评论 -
线程中实现不可中断的任务
1. 对线程中断操作的理解它并不会真正地中断一个正在运行的线程,而只是发出中断请求,然后由线程在下一个合适的时刻中断自己。 调用interrupt并不意味着立即停止目标线程正在进行的工作,而只是传递了请求中断的消息。public class Thread { /**interrupt方法能中断目标线程*/ public void interrupt(){......原创 2018-05-27 18:34:34 · 1391 阅读 · 0 评论 -
java内存模型
1.java 线程之间的通信机制共享内存2. Java内存模型的抽象结构如果线程A与线程B之间要通信的话,必须要经历一下2个步骤:线程A把本地内存A中更新过的共享变量刷新到主内存中。线程B到主内存中去读取线程A之前已更新过的共享变量。JMM通过控制主内存与每个线程的本地内存之间的交互,来为java程序员提供内存可见性保证。3. 重排序在执行程序时,为了提高性能...原创 2018-06-03 16:07:05 · 122 阅读 · 0 评论 -
现有线程安全类中添加功能
1.扩展Vector并增加一个“若没有则添加”方法public class BetterVector<E> extends Vector<E> { public synchronized boolean putIfAbsent(E x) { boolean absent = !contains(x); if (absent) ...原创 2018-05-12 22:19:27 · 180 阅读 · 0 评论 -
线程池隔离的优缺点
1.线程隔离的优点:尽管线程池提供了线程隔离,我们的客户端底层代码也必须要有超时设置,不能无限制的阻塞以致线程池一直饱和。2.线程隔离的缺点:The Netflix API processes 10+ billion Hystrix Command executions per day using thread isolation. Each API instance has 40+ th...原创 2018-10-13 20:35:37 · 4225 阅读 · 0 评论