![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
多线程
多线程在面试的时候问的很多,在此一边学习一边总结。
hello_cmy
这个作者很懒,什么都没留下…
展开
-
手动创建线程池,效果会更好哦
今天在回顾线程池的创建时,使用Executors创建线程池报错了,出现了以下问题:手动创建线程池,效果会更好哦。查阅了阿里巴巴Java开发手册回顾一下,通过ThreadPoolExecutor来创建。找一下源码public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime,原创 2021-07-19 16:17:06 · 9554 阅读 · 0 评论 -
可重入锁的理解
可重入锁:拿到了外面的锁之后,就自动获取到了里面的锁。简单的测试一下:synchronized 版package com.cc.lock;public class Demo1 { public static void main(String[] args) { Phone phone = new Phone(); new Thread(()->{ phone.sms(); },"A").start();原创 2020-05-13 16:19:56 · 377 阅读 · 0 评论 -
解决ABA问题,原子引用
解决ABA问题,原子引用整体思想是乐观锁。一般的实现乐观锁的方式就是记录数据版本。 线程在提交前,根据版本号来判断是否冲突。看代码:package com.cc.cas;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicStampedReference;public cla...原创 2020-04-22 15:22:54 · 438 阅读 · 2 评论 -
CAS问题
CAS什么是CAScompareAndSet的缩写,比较并交换。如果达到期望值,那么就更新,否则,就不更新。通过例子来解释一下:package com.cc.cas;import java.util.concurrent.atomic.AtomicInteger;public class CASDemo { public static void main(String...原创 2020-04-22 14:40:03 · 298 阅读 · 0 评论 -
生产者与消费者问题(synchronized版和JUC版)
生产者和消费者问题synchronized版package com.cc.pc;/*** 线程之间的通信问题:生产者和消费者问题! 等待唤醒,通知唤醒* 线程交替执行 A B 操作同一个变量 num = 0* A num+1* B num-1*/public class A { public static void main(String[] args) { ...原创 2020-04-20 16:54:08 · 249 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier 和 Semaphore
CountDownLatch、CyclicBarrier 和 Semaphore可以参考JDK1.8的帮助文档。1、CountDownLatchpackage com.cc.add;import java.util.concurrent.CountDownLatch;public class CountDownLatchDemo { public static void m...原创 2020-04-15 11:37:29 · 106 阅读 · 0 评论 -
创建线程的四种方式
有四种方式创建线程:继承Thread类实现Runnable接口实现Callable接口创建线程池(重要,单独讲解)继承Thread类public class MyThread extends Thread { @Override public void run() { System.out.println(Thread.currentThread...原创 2020-04-15 10:46:40 · 142 阅读 · 0 评论 -
并发编程的三个重要特征
并发编程的三个重要特征原子性 : 一个操作或者多次操作,要么所有的操作全部都得到执行并且不会收到任何因素的干扰而中断,要么所有的操作都执行,要么都不执行。synchronized 可以保证代码片段的原子性。可见性 :当一个变量对共享变量进行了修改,那么另外的线程都是立即可以看到修改后的最新值。volatile 关键字可以保证共享变量的可见性。有序性 :代码在执行的过程中的先后顺序,Java...原创 2020-04-08 13:08:39 · 1274 阅读 · 0 评论 -
Lock锁
Lock锁经典卖票例子传统Synchronized来实现。package com.cc.demo1;/** * 真正的多线程开发,公司中的开发,降低耦合性 * 线程就是一个单独的资源类,没有任何附属的操作! * 1、 属性、方法 */public class SaleTicketDemo1 { public static void main(String[] arg...原创 2020-04-08 13:01:20 · 146 阅读 · 0 评论 -
Synchronized关键字
Synchronized关键字1、对Synchronized的了解synchronized关键字解决的是多个线程之间访问资源的的同步性。synchronized可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。2、使用synchronized修饰实例方法:作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁。修饰静态方法: 访问静态 synchronized 方...原创 2020-04-08 12:22:39 · 105 阅读 · 0 评论 -
JMM
JMM对 volatile的理解Volatile是Java虚拟机提供轻量级同步机制。1、保证可见性。2、不保证原子性3、禁止指令重排什么是JMMJMM:Java内存模型,不存在的东西。来屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前,主流程序(如C 和C++等)直接使用物理硬件和操作系统的内存模型。因此,由于不同...原创 2020-04-07 13:00:37 · 275 阅读 · 0 评论 -
volatile
volatile1、保证可见性2、不保证原子性3、禁止指令重排1、保证可见性package com.cc.tvolatile;import java.util.concurrent.TimeUnit;public class JMMDemo { //不加 volatile 程序就会死循环 //加 volatile 可以保证可见性 private vo...原创 2020-04-07 12:59:21 · 120 阅读 · 0 评论 -
线程池
三大方法,7大参数,4中拒绝策略池化技术程序的运行,本质:占用系统的资源! 优化资源的使用!=>池化技术线程池、连接池、内存池、对象池///… 创建、销毁。十分浪费资源池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我。线程池的好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要的等到线程创...原创 2020-04-06 15:17:43 · 165 阅读 · 0 评论 -
单例模式
1、单例模式定义保证一个类仅有一个实例,并提供 一个访问他的全局访问点。2、为什么要使用单例模式在我们的系统中,有一些对象其实我们只需要一个,比如说:线程池、缓存、对话框、注册表、日志对象、充当打印机、显卡等设备驱动程序的对象。事实上,这一类对象只能有一个实例,如果制造出多个实例就可能会导致一些问题的产生,比如:程序的行为异常、资源使用过量、或者不一致性的结果。简单来说使用单例模式可以带来...原创 2020-04-06 15:13:47 · 104 阅读 · 0 评论