多线程
哆啦酱不加班
把摸鱼的时间用来学习
展开
-
一个死锁的demo以及排查
文章首发于个人博客,欢迎访问关注:https://www.lin2j.tech死锁出现的原因a. 系统资源不足b. 进程的推进顺序不当c. 资源分配不当死锁指的是两个或者多个进程在执行过程中,因为资源争夺而导致互相等待资源释放,若无外力干涉它们无法继续推进下去的情况。如果系统资源充足,那么进程的资源请求都能够得到满足,那么死锁出现的可能性就会降低,否则会因为争夺有限的资源而陷入死锁。下面通过一个例子来演示这种资源争夺的情况。import java.util.concurrent.*;原创 2021-11-17 16:03:10 · 180 阅读 · 0 评论 -
浅谈synchronized和ReentrantLock的区别
文章首发于个人博客,欢迎访问关注:https://www.lin2j.tech本文会简单对比一下 synchronized 关键字和 Lock 的区别,不会讲到底层原理。synchronized 和 Lock 有什么区别?使用Lock有什么好处,举例说明。底层结构不同(所属层面 JVM vs API)synchronized 是关键字,属于 JVM 层面的。monitorenter(底层是通过 monitor 对象来完成,其实 await 和 notify 方法都依赖于 monitor原创 2021-04-06 17:31:54 · 149 阅读 · 0 评论 -
线程创建的方式有哪些?
文章首发于个人博客,欢迎访问关注:https://www.lin2j.tech欢迎指错,后续更正import org.junit.Test;import java.util.concurrent.*;/** * 创建线程的四种方法,但不管是哪种方法,最后都是要使用 Thread 类来执行start()方法 * 1、采用普通的Thread类实例来创建线程 * 2、采用实现Runnable接口的方式来来决定线程的动作 * 3、采用实现Callable接口是实例化 FutureTask 决定线原创 2021-03-23 07:51:16 · 136 阅读 · 0 评论 -
Java日期格式化之线程安全
在项目中或多或少会用到日期格式。如果在单线程中,可以不用考虑使用的格式化类是否线程安全,但是在多线程,并发执行时,就要考虑线程同步的问题了。下面提供四中解决方式,并简单说明一下优缺点(看注释)。实际工作中我是直接使用 hutool 的 DateUtil,真香。ConcurrentDateFormat 和 ThreadLocalDateFormat 是自己封装的import org.junit.Test;import java.text.SimpleDateFormat;import jav原创 2021-03-22 08:08:07 · 800 阅读 · 0 评论 -
线程池的参数、配置、关闭、拒绝策略、基本概念
文章首发于个人博客,欢迎访问关注:https://www.lin2j.tech线程池的概念和工作机制概念:首先系统空闲时在创建大量线程,这些线程的集合成为线程池。线程的生老病死都由线程池来决定。工作机制:当有任务到来时,提交给线程池,由线程池来指定线程执行任务。线程池会在内部寻找是否有可以执行任务的线程。任务执行完成后,线程不会被销毁,而是进入空闲状态。一个线程一个时刻只能执行一个任务,但是却可以向线程池提交多个任务(只不过后来的任务可能需要等待)。为什么要使用线程池(好处)?降低资源的原创 2021-03-22 07:56:38 · 212 阅读 · 0 评论