随笔分类 - Java线程
摘要:java在编写多线程程序时,为了保证线程安全,需要对数据同步,经常用到两种同步方式就是Synchronized和重入锁ReentrantLock。 相似点: 这两种同步方式有很多相似之处,它们都是加锁方式同步,而且都是阻塞式的同步,也就是说当如果一个线程获得了对象锁,进入了同步块,其他访问该同步块的
阅读全文
摘要:线程调度使用类:ScheduledExecutorService 创建线程池调度类对象: 向线程池中添加任务的方法不是submit,而是:schedule 包含3个参数: callable:线程执行的任务 delay:要延迟的时间 unit:延迟时间的单位:例如:秒:TimeUnit.SECONDS
阅读全文
摘要:一,问题 在没有使用线程池的时候,每次需要一个线程都得手动new Thread()方式创建线程,用完了再销毁。 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效
阅读全文
摘要:1,一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其它的线程都只能等待, 换句话说,某一个时刻内,只能有唯一一个线程去访问这些synchronized方法。 2,锁的是当前对象this,被锁定后,其它的线程都不能进入到当
阅读全文
摘要:ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的。 ReadWriteLock 读取操作通常不会改变共享资源,但执行写入操作时,必须独占方式来获取锁。 对于读取操作占多数的数据结
阅读全文
摘要:编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归 这里只使用conditon和Lock组合使用,不考虑synchronized和wait的方式: 第一种方式:使用
阅读全文
摘要:1,Codition接口描述了可能会与锁有关联的条件变量。这些变量在用法上与使用Object.wait访问的隐式监视器类似。 但提供了更强大的功能,需要指出的是,单个lock可能与多个condition对象关联。为了避免兼容性问题,condition方法的名称与对应的object版本中不一样。 2,
阅读全文
摘要:Java多线程系列目录(共43篇) http://www.cnblogs.com/skywang12345/p/java_threads_category.html
阅读全文
摘要:实现线程的方式有四种: 1,实现runnable接口: 2,继承Thread。 3,也就是本节的Callable接口。 4,使用线程池。 区别: 实现Callable接口的方式,相较于实现Runnable接口方式,可以有返回值,并且可以抛出异常。 执行 Callable 方式,需要 FutureTa
阅读全文
摘要:CountDownLatch::闭锁,在完成某些运算是,只有其他所有线程的运算全部完成,当前运算才继续执行。 实例化:参数:设置一个计数器的值。 计数器减一: 计数器等待: 效果:首先初始化一个CountDownLatch对象,该对象设置计数器的值,在需要运算的地方,每次执行完一次运输,通过latc
阅读全文
摘要:以下是一个案例,有一个店员,负责进货和卖货。进货生产,卖货消费。 当商品超过10件,生产等待,消费继续,当少于0件,消费等待,消费继续。 正常代码如下: 运行结果: 很和谐没问题!,生产者每次生产完就等待一下,导致消费者抢到资源,这样导致:0,1轮替。 但是,如果此时再假如一个生产者和消费者: 此时
阅读全文
摘要:看的该文章的总结: https://juejin.im/post/5adf14dcf265da0b7b358d58 synchronized一般我们用来修饰三种东西: 修饰普通方法 修饰代码块 修饰静态方法 1.4.1修饰普通方法: 用的锁是Java3y对象(内置锁) public class Ja
阅读全文
摘要:作者多线程总目录:http://www.cnblogs.com/xrq730/category/733883.html 原文地址: 40个Java多线程问题总结 前言 Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多、越杂的知识,越需要进行深刻的总结,这样才
阅读全文
摘要:转载方便自己学习,转自:Java多线程系列目录(共43篇) http://www.cnblogs.com/skywang12345/p/java_threads_category.html 最近,在研究Java多线程的内容目录,将其内容逐步整理并发布。 (一) 基础篇 01. Java多线程系列--
阅读全文
摘要:转载自:掘金大闲人柴毛毛博客。 ThreadLocal是开发中最常用的技术之一,也是面试重要的考点。本文将由浅入深,介绍ThreadLocal的使用方式、实现原理、内存泄漏问题以及使用场景。 ThreadLocal作用 在并发编程中时常有这样一种需求:每条线程都需要存取一个同名变量,但每条线程中该变
阅读全文
摘要:转载自掘金占小狼博客。 前言 在面试环节中,考察"ThreadLocal"也是面试官的家常便饭,所以对它理解透彻,是非常有必要的. 有些面试官会开门见山的提问: “知道ThreadLocal吗?” “讲讲你对ThreadLocal的理解” 当然了,也有面试官会慢慢引导到这个话题上,比如提问“在多线程
阅读全文
摘要:本文转自掘金占小狼:用于理解HashMap为什么线程不安全,不能用于并发。 地址就在下文: 问题 由于HashMap并非是线程安全的,所以在高并发的情况下必然会出现问题,这是一个普遍的问题,虽然网上分析的文章很多,还是觉得有必须写一篇文章,让关注我公众号的同学能够意识到这个问题,并了解这个死循环是如
阅读全文
摘要:下面是一共通过volatile实现原子性的例子: 通过建立100个线程,计算number这个变量最后的结果。 运行结果: 发现有几种结果: 造成这个结果的原因就是,volatile关键字具有可见性,number++实际上有三步操作,但是不具备原子性。 程序分析: number++包含三步操作:1,读
阅读全文
摘要:volatile关键字: 1)能够保证volatile变量的可见性 2)不能保证volatile变量复杂操作的原子性。 volatile如何实现内存可见性: 深入来说:通过加入内存屏障和禁止重排序优化来实现的。 1)对volatile变量执行写操作时,会在写操作后加入一条store屏障指令 2)对v
阅读全文
摘要:以下是一个普通线程代码: 这段线程目标是输出6。 但是因为线程的执行顺序,可能导致不同的结果: 执行顺序:1.1-》2.1-》2.2-》1.2 结果:3 执行顺序,加上重排序的原因,导致先1.2,后1.1:1.2-》2.1-》2.2-》1.1 结果:0 可见性分析: 导致共享变量在线程间不可见的原因
阅读全文