
JUC
文章平均质量分 84
木木_亭
岂能尽如人意,但求无愧于心
展开
-
JUC学习--volatile关键字&内存可见性
学习记录,若存在错误,请指出,谢谢!首先,介绍一些内存可见性内存可见性:当多个线程操作共享数据时,彼此不可见为什么会导致这个情况?在线程运行的过程中,JVM或者说是内存会为每一个线程分配一个独立的缓存用于提高效率。举个例子:现在有一个读操作的线程和一个写操作的线程,对主存中的一个共享变量进行操作写操作:线程先从主存中将共享变量读到线程独有的缓存中,然后对变量的值进行修改,最后再把修改后的变量的值写...原创 2018-03-21 17:14:25 · 237 阅读 · 0 评论 -
JUC学习之ReadWriteLock读写锁
本文为看视频学习笔记,若有错误,请指正,谢谢!之前,在涉及到线程安全问题时,一般都会给选择直接加锁,保证一次只有一个线程能够访问到共享变量,但是这会一定程度上导致性能问题,因此今天要来介绍一下读写锁读写锁维护了一对锁,一个用于读操做的读锁,另一个是用于写操作的写锁。读锁可以被多个线程并发的持有,在没有写操作的时候;写锁只能被一个线程持有。应用场景:写写/读写场景下,锁需要“互斥”; ...原创 2018-04-20 15:05:21 · 228 阅读 · 0 评论 -
JUC学习之Fork/Join分支合并框架
1.什么是Fork/Join框架? Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。2.Fork/Join框架的结构:需要ForkJoinPool才能使用 在Fork/Join中,我们主要用它自定义的线程池来提交任务和调度任务,称之为:ForkJoinPool;同时我们有它自己的任务执...原创 2018-04-24 17:23:15 · 451 阅读 · 1 评论 -
JUC学习之线程按序交替
本文为看视频学习笔记,若有错误请指正,谢谢!例题:编写一个程序,开启3个线程,这3个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上面打印10遍,要求输出的结果必须按顺序显示。例如:ABCABCABC……一次递归代码:public class TestABCAlternate { public static void main(String[] args){ Al...原创 2018-04-20 10:24:15 · 235 阅读 · 0 评论 -
JUC学习之生产者消费者案例-Lock-Condition线程通信
本文是看视频学习笔记,若有错误请指正!生产者消费者案例的lock写法其中涉及到了Condition的用法,简答的介绍一下:1.Condition接口描述了可能会与锁相关的条件变量,这些变量在用法上与使用Object.wait访问的隐式监视器类似,但提供了更强大的功能。需要特别之处的是,单个lock可能会与多个Condition对象关联,为了避免兼容性问题,Condition方法的名称与对应的Obj...原创 2018-04-19 17:53:32 · 249 阅读 · 0 评论 -
JUC学习之生产者消费者案例-synchronized-虚假唤醒
本文为看视频学习记录,若有错误请指正!在实际开发过程中,我们可以将添加和创建数据的线程看做是生产者,删除和销毁数据的线程看做是消费者。若不用等待唤醒机制,假设生产者过快,消费者跟不上,那么会导致数据的丢失; 假设消费者过快,生产者跟不上,那么可能会导致重复的数据或者是错误的数据;synchronized写法-等待唤醒public c...原创 2018-04-19 17:08:29 · 475 阅读 · 0 评论 -
JUC学习之Lock同步锁
本文为看视频学习笔记,若有错误请指正!解决线程安全问题的方式一共有3种1.同步代码块2.同步方法3.同步锁Lock其中第1,2种方式是jdk1.5之前就已经提供了的,使用的时候我们需要加上synchronized关键字,是一个隐式锁,而同步锁Lock是jdk1.5的concurrent包提供的,是一个显示锁,需要通过lock()方法上锁,必须通过unlock()释放锁,像这样相较于synchron...原创 2018-04-19 15:05:34 · 328 阅读 · 0 评论 -
JUC学习之线程池
本文为看视频学习笔记,若有错误请指正,谢谢!原先如果要用到线程,需要在使用的时候new一个线程出来,并且不需要使用之后,还要销毁 new Thread(ticket,"1号窗口").start();但是当任务数量较多的情况下,开发人员频繁的创建线程然后销毁线程的话,是非常耗费资源的,那么就有了线程池的概念。概念上与数据库连接池类似线程池:提供了一个线程队列,队列中保存着等待状态的线程,只要有任务,...原创 2018-04-23 17:11:34 · 534 阅读 · 0 评论 -
JUC学习之创建线程执行的方式三-实现Callable接口
本文是看视频学习资料,若有错误请指正!我想所有人都知道,创建线程执行方式有2种:继承Thread类创建线程;实现Runnable接口创建线程,但是实际上,创建执行线程的方式有4种:除了上述2种,还有实现Callable接口创建线程以及线程池的方式创建线程。对于第一和第二种方法,一般使用的是第二种方式,那么Runnable和Callable有什么区别呢?1.Callable允许带泛型2.重写的方法不...原创 2018-04-18 17:33:03 · 289 阅读 · 0 评论 -
JUC学习之CountDownLatch 闭锁
本文为看视频学习笔记,若有错误请指正,谢谢!1.什么是CountDownLatch ? 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或者多个线程一直等待,在jdk1.5之后提供2.什么是闭锁? 在完成某些运算时,只有其他多有线程的运算全部完成,当前运算才继续执行上代码public class TestCountDownLatch { public...原创 2018-04-17 17:53:37 · 216 阅读 · 0 评论 -
JUC学习之同步容器类ConcurrentHashMap
本文是看视频的笔记,若有错误请指出,谢谢!jdk1.5之后添加了ConcurrentHashMap类,其底层是CAS算法实现的,采用的是“锁分段”机制,有个concurrentLevel分段级别,默认的级别为16,也就是说默认有16个分段,每个分段中也有一个默认长度为16的表,表中的每个单位由链表组成。每个段都是独立地锁,当多个线程并发访问时,可以并行进行操作,效率高了并且线程安全。在这个包中还提...原创 2018-04-17 16:18:00 · 283 阅读 · 0 评论 -
JUC学习之原子变量与CAS算法
本文为看视频学习记录,若有错误,请指正,谢谢!首先介绍一下i++操作的原子性i++的操作实际上分成3个步骤“读-改-写”例如:Int i = 10;I = i++;实际上Int temp = i;I = i + 1;I = temp;看一段代码,表明在开发过程中原子性问题的表现:public class TestAtomicDemo { public static void main(St...原创 2018-03-26 20:29:36 · 256 阅读 · 0 评论 -
JUC学习之线程8锁
本文为看视频学习资料,若有错误,请指正,谢谢!介绍线程8锁围绕一个题目展开,题目:打印的是“one”还是“two”?1.两个普通同步方法,两个线程,打印?public class TestThread8Monitor { public static void main(String[] args){ Number number = new Number(); ...原创 2018-04-20 15:53:28 · 789 阅读 · 0 评论