
多线程
讲解多线程知识
杭州小哥哥
记录学习笔记
展开
-
AQS学习笔记
原创 2024-04-02 22:41:34 · 119 阅读 · 0 评论 -
谈一下Spring IOC的底层实现
spring原创 2022-10-24 22:53:37 · 313 阅读 · 0 评论 -
线程之间如何进行通讯的
多线程原创 2022-09-01 23:11:37 · 270 阅读 · 0 评论 -
说一下ThreadLocal
ThreadLocal原创 2022-09-01 23:00:56 · 120 阅读 · 0 评论 -
如何查看线程死锁
多线程原创 2022-09-01 22:58:38 · 449 阅读 · 0 评论 -
如果提交任务时,线程池队列已满,这时会发生什么
多线程原创 2022-09-01 22:47:26 · 416 阅读 · 0 评论 -
线程池中阻塞队列的作用?为什么是先添加队列而不是先创建最大线程?
多线程原创 2022-08-29 07:40:06 · 346 阅读 · 0 评论 -
CountDownLatch和Semaphore
多线程原创 2022-08-28 22:40:47 · 143 阅读 · 0 评论 -
锁池和等待池的区别
锁原创 2022-08-25 23:40:40 · 208 阅读 · 0 评论 -
Sychronized的偏向锁,轻量级锁,重量级锁
Sychronized的偏向锁,轻量级锁,重量级锁原创 2022-08-25 23:29:59 · 157 阅读 · 0 评论 -
Sychronized和RentrantLock的区别
多线程原创 2022-08-25 23:26:29 · 148 阅读 · 0 评论 -
如何理解Volatile关键字
volatile原创 2022-08-25 23:24:47 · 110 阅读 · 0 评论 -
为什么使用线程池,解释下线程池参数
线程池原创 2022-08-25 22:39:32 · 210 阅读 · 0 评论 -
ThreadLocal底层原理
ThreadLocal原创 2022-08-23 23:32:49 · 105 阅读 · 0 评论 -
对线程安全的理解
线程安全原创 2022-08-23 22:53:42 · 129 阅读 · 0 评论 -
getAndIncrement中使用cas
原创 2021-08-31 22:14:07 · 137 阅读 · 1 评论 -
notify()和notifyAll()
原创 2021-08-22 20:50:44 · 185 阅读 · 0 评论 -
interrupt()会中断线程的wait等待
public class Thread5 { public static void main(String[] args) { SubThread subThread = new SubThread(); subThread.start(); try { //主线程睡眠2秒,确保子线程处于wait状态 Thread.sleep(2000); } catch (I...原创 2021-08-22 20:23:09 · 426 阅读 · 0 评论 -
notify()唤醒线程,不会立即释放锁对象,需要等到当前同步代码块都执行完后才能释放锁对象
notify()唤醒线程,不会立即释放锁对象,需要等到当前同步代码块都执行完后才能释放锁对象public class Test3 { public static void main(String[] args) { List<String> list = new ArrayList<>(); Thread thread1 = new Thread(new Runnable() { @Override .原创 2021-08-22 20:05:31 · 530 阅读 · 0 评论 -
wait和notify使用例子
public class Test2 { public static void main(String[] args) { String lock = "lock"; Thread thread1 = new Thread(new Runnable() { @Override public void run() { synchronized (lock){ ...原创 2021-08-22 19:38:14 · 257 阅读 · 0 评论 -
为什么SimpleDateFormat不是线程安全的?以及解决方法说明
说的很清楚,SimpleDateFormat 不是线程安全的,多线程下需要为每个线程创建不同的实例。不安全的原因是因为使用了 Calendar 这个全局变量:在日期格式化的时候:我们把重点放在 calendar ,这个 format 方法在执行过程中,会操作成员变量 calendar 来保存时间 calendar.setTime(date) 。但由于在声明 SimpleDateFormat 的时候,使用的是 static 定义的,那么这个 SimpleDa...原创 2021-05-04 11:51:05 · 3132 阅读 · 1 评论 -
等待因该出现在while循环中,防止虚假唤醒
原创 2021-04-22 22:54:11 · 214 阅读 · 1 评论 -
多线程
原创 2021-04-22 08:10:50 · 122 阅读 · 0 评论 -
线程的生命周期及五种基本状态介绍
一.线程的生命周期及五种基本状态关于Java中线程的生命周期,首先看一下下面这张较为经典的图:上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点,Java中的多线程也就基本上掌握了。主要包括:Java线程具有五中基本状态新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程.原创 2021-04-21 11:47:08 · 512 阅读 · 0 评论 -
CountDownLatch的理解和使用
闭锁CountDownLatch概念CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务。CountDownL原创 2021-04-18 22:24:11 · 3318 阅读 · 0 评论 -
volatile不具备原子性
1、理解原子性:上面说到volatile不具备原子性,那么原子性到底是什么呢?先看如下代码public class TestVolatile { public static void main(String[] args) { AtomicDemo atomicDemo = new AtomicDemo(); for (int x = 0; x < 10; x++) { new Thread(atomicDemo).start原创 2021-04-18 21:42:26 · 415 阅读 · 2 评论 -
Synchronized和Lock区别
原创 2021-03-29 07:58:29 · 233 阅读 · 0 评论 -
多线程卖票问题
public class Ticket { private int number =30; public void sale(){ if(number > 0){ System.out.println(Thread.currentThread().getName() + "卖出了" +(number--) + "票,剩余:" + number); } } public static void mai...原创 2021-03-28 23:09:00 · 157 阅读 · 0 评论 -
wait和sleep的区别
原创 2021-03-27 11:53:26 · 128 阅读 · 0 评论 -
TimeUnit
TimeUnitTimeUnit.DAYS 表示天TimeUnit.SECONDS表示 秒原创 2021-03-27 11:50:19 · 448 阅读 · 0 评论 -
线程状态
原创 2021-03-27 11:45:05 · 101 阅读 · 0 评论 -
并发和并行
原创 2021-03-27 11:32:26 · 123 阅读 · 0 评论 -
System.out.println(Runtime.getRuntime().availableProcessors());获取cpu核数
原创 2021-03-27 11:30:33 · 566 阅读 · 0 评论 -
每秒钟承载600万订单级别的无锁并行计算框架 Disruptor学习
1.来源Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内部的内存队列的延迟问题,而不是分布式队列。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。2.应用背景和介绍据目前资料显示:应用Disruptor的知名项目有如下的一些:Storm, Camel, Log4j2,还有目前的美团点评技术团队也有很多不少的应用,或者说有一些借鉴了它的设计机制。Disruptor是一个高性能的线程间异步通信的框架,即在原创 2021-03-27 10:35:51 · 562 阅读 · 0 评论 -
线程可见性和关键字volatile
线程可见性可以看到程序变量running没volatile是死循环加了volatile成功输出public class VolitaleTest { private static volatile boolean running = true; public static void main(String[] args) { Thread thread = new Thread(() ->{ long i =0L;.原创 2021-03-27 10:10:19 · 181 阅读 · 0 评论 -
L1,L2,L3三级缓存
原创 2021-03-27 09:25:43 · 425 阅读 · 0 评论 -
超线程
原创 2021-03-27 09:21:22 · 127 阅读 · 0 评论 -
start() 跟 run() 方法的区别和联系
这里还有个知识点是 start() 跟 run() 方法的区别和联系。直接调用 start() 方法,此时线程处于一个就绪(可运行)的状态,但是并没有真正的运行。而是得到CPU 的时间片后,开始执行 run() 方法,run() 方法里面的是我们的线程体。我们直接 运行 run() 方法,它其实就是一个普通的方法调用,在主线程中执行,是不会开启多线程的。...原创 2021-03-01 10:24:42 · 344 阅读 · 0 评论 -
线程生命周期
线程的生命周期包含5个阶段,包括:新建、就绪、运行、阻塞、销毁。 新建:就是刚使用new方法,new出来的线程; 就绪:就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行; 运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作和功能; 阻塞:在运行状态的时候,可能因为某些原因导致运行状态的线程变成了阻塞状态,比如sleep()、wait()之后线程就处于了阻塞状态,这个时候需要其他机原创 2021-02-02 11:23:26 · 99 阅读 · 0 评论 -
synchronized
synchronized加在成员方法上,锁住的是this对象synchronized加在static静态方法上,锁住的是类对象原创 2021-01-23 23:20:03 · 170 阅读 · 0 评论