![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 50
改专栏针对多线程的使用和讲解进行描述
有温度的代码
我本微末凡尘,却也心向天空
展开
-
TreeMap源码分析
TreeMap 基于红黑树实现,这为 TreeMap 保持键的有序性打下了基础。总的来说,TreeMap 的核心是红黑树,TreeMap因为是通过红黑树实现,红黑树结构天然支持排序,默认情况下通过Key值的自然顺序进行排序。翻译 2023-05-16 08:13:48 · 584 阅读 · 0 评论 -
如果线上遇到了OOM,该如何解决?
OOM 意味着程序存在着漏洞,可能是代码或者 JVM 参数配置引起的。这篇文章和读者聊聊,Java 进程触发了 OOM 后如何排查常说对生产环境保持敬畏之心,快速解决问题也是一种敬畏的表现。原创 2023-05-04 23:30:00 · 2115 阅读 · 0 评论 -
并发编程和并行编程区别
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。1、并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。2、并行是在不同实体上的多个事件;并发是在同一实体上的多个事件。原创 2023-04-18 11:45:06 · 90 阅读 · 0 评论 -
多线程开发良好的实践
CountDownLatch, Semaphore, CyclicBarrier 和 Exchanger 这些同步类简化了编码操作,而用 wait 和 notify 很难实现对复杂控制流的控制。并发容器比同步容器的可扩展性更好,所以在并发编程时使用并发集合效果更好。2、最小化同步范围,锁花费的代价高昂且上下文切换更耗费时间空间,试试最低限度的使用同步和锁,缩小临界区。其次,这些类是由最好的企业编写和维护在后续的 JDK 中它们还会不断优化和完善,使用这些更高等级的同步工具你的程序可以不费吹灰之力获得优化。原创 2023-04-18 11:42:06 · 62 阅读 · 0 评论 -
ThreadLocal底层实现原理
为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量,使线程之间相互独立互不影响。转载 2023-04-18 10:39:27 · 1200 阅读 · 0 评论 -
wait + notify 实现通知机制
当一个线程需要调用对象的 wait()方法的时候,这个线程必须拥有该对象的锁,接着它就会释放这个对象锁并进入等待状态直到其他线程调用这个对象上的 notify()方法。同样的,当一个线程需要调用对象的 notify()方法时,它会释放这个对象的锁,以便其他在等待的线程就可以得到这个对象锁。2、线程b不会立即获取锁,因为线程A获取锁后线程B会进行等待,线程A执行wait方法释放锁后线程B获取锁,线程B执行notify方法后释放锁,唤醒线程A,线程进入就绪状态,获取cpu的执行权后继续执行代码。原创 2023-04-18 10:05:25 · 50 阅读 · 0 评论 -
创建线程的方式及实现
方式一的 优点: 编写简单,如果需要访问当前线程,则无需使用 Thread#currentThread() 方法,直接使用 this 即可获得当前线程。* 方式二或三的优点:线程类只是实现了 Runnable 接口或 Callable 接口,还可以继承其他类。* 缺点:编程稍微复杂,如果要访问当前线程,则必须使用Thread#currentThread() 方法。* 方式二,使用 interrupt 方法,结合 isInterrupted 方法一起使用。* 方式一,继承 Thread 类创建线程类。原创 2023-04-18 09:04:08 · 61 阅读 · 0 评论 -
线程的生命周期
直到线程进入可运行(runnable)状态,才有机会再次获得 CPU 资源,转到运行(running)状态。可运行(runnable):线程对象创建后,其他线程(比如 main 线程)调用了该对象的 start 方法。运行(running):线程获得 CPU 资源正在执行任务(#run() 方法),此时除非此线程自动放弃 CPU 资源或者有优先级更高的线程进入,线程将一直运行到结束。死亡(dead):当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。原创 2023-04-18 08:51:23 · 947 阅读 · 0 评论 -
什么是多线程上下文切换?
多线程在在日常开发中应用场景比较多,所以合理的使用线程尤为重要。原创 2023-04-18 06:51:32 · 1929 阅读 · 0 评论 -
简述线程、进程、程序的基本概念?
进程,是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。线程,与进程相似,但线程是一个比进程更小的执行单位。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。2、大量的线程降低代码的可读性。原创 2023-04-17 21:24:07 · 51 阅读 · 0 评论 -
线程的interrupted 和 isInterrupted 方法的区别
线程的中断更多的是气到标记作用,监听到线程的中断状态再进行逻辑处理,可以参考AQS的源码进行理解。原创 2023-04-17 21:00:12 · 97 阅读 · 0 评论 -
sleep、join、yield 方法有什么区别?
多线程中的yied方法在开发过过程中至今没有场景使用过,如果有生产中使用场景的小伙棒可以留言告知。原创 2023-04-17 17:49:01 · 443 阅读 · 0 评论