随笔分类 - JUC
摘要:什么是AQS aqs全称为AbstractQueuedSynchronizer,它提供了一个FIFO队列,可以看成是一个用来实现同步锁以及其他涉及到同步功能的核心组件,常见的有:ReentrantLock、CountDownLatch等。 AQS是一个抽象类,主要是通过继承的方式来使用,它本身没有实
阅读全文
摘要:1.wait,sleep的区别1)sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep 不会释放对象锁。wait 是Object 类的方法,对此对象调用wait 方法导致本线程放弃对象锁,进入等待此对象的
阅读全文
摘要:CAS(Compare and Swap,比较并交换): CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。 如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值 。否则,处理器不做任何操作。 利用CPU的CAS指令,同时借助JNI来完成Java的非阻塞
阅读全文
摘要:两个线程,一个打印1-100的奇数,一个打印1-100的偶数;要求:线程1打印5个之后,线程2开始打印,线程2打印5个之后,线程1再开始打印,以此循环。 Code: Output: 1 3 5 7 9 2 4 6 8 10 11 13 15 17 19 12 14 16 18 20 21 23 25
阅读全文
摘要:1.Timer Timer 的优点在于简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务。 ScheduledExecutor 展示了 ScheduledExecutorService 中两种最常用的
阅读全文
摘要:java通常的代码无法直接使用操作底层的硬件,为了使java具备该能力,增加了Unsafe类 java的并发包中底层大量的使用这个类的功能,了解这个类有助于了解java 并发包,理解为什么并发包中的类的并发性能为什么会比使用synchronized好 Atomic包介绍 在Atomic包里一共有12
阅读全文
摘要:在AQS里面进行阻塞线程,解除阻塞线程就用的LockSupport。 JDK1.8源码: package java.util.concurrent.locks; import sun.misc.Unsafe; public class LockSupport { private LockSuppor
阅读全文
摘要:生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者,用于从缓冲区中取出消息。问题出现在当缓冲区已经满了,而此时生产者还想向其中放入一个新的数据
阅读全文
摘要:submit方法: submit返回的最终是FutureTask对象 execute方法: 具体的实现在ThreadPoolExecutor类中 submit内部调用execute submit有返回值 submit方便exception处理 submit的demo: call()方法被自动调用,干
阅读全文
摘要:Future表示一个任务的周期,并提供了相应的方法来判断是否已经完成或者取消,以及获取任务的结果和取消任务。 Future接口源码: public interface Future<V> { boolean cancel(boolean mayInterruptIfRunning); boolean
阅读全文
摘要:Thread: 窗口1卖掉了1张票,剩余票数为:4 窗口1卖掉了1张票,剩余票数为:3 窗口1卖掉了1张票,剩余票数为:2 窗口1卖掉了1张票,剩余票数为:1 窗口1卖掉了1张票,剩余票数为:0 窗口3卖掉了1张票,剩余票数为:4 窗口2卖掉了1张票,剩余票数为:4 窗口3卖掉了1张票,剩余票数为:
阅读全文
摘要:Java的Object类 调用这些方法的当前线程必须拥有此对象监视器,否则将会报java.lang.IllegalMonitorStateException exception wait; Object的wait方法有三个重载方法,其中一个方法wait() 是无限期(一直)等待,直到其它线程调用no
阅读全文
摘要:在什么情况下使用线程池? 1.单个任务处理的时间比较短 2.将需处理的任务的数量大 使用线程池的好处: 1. 降低资源消耗: 通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2. 提高响应速度: 当任务到达时,任务可以不需要等到线程创建就能立即执行。3. 提高线程的可管理性: 线程是稀缺资源,
阅读全文
摘要:Lock与Synchronized的区别: 1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现; 2)synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLo
阅读全文
摘要:synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这
阅读全文