线程
文章平均质量分 74
线程
小海海不怕困难
可以,但是得加钱
展开
-
线程池原理
线程池,按照配置参数(核心线程数、最大线程数等)创建并管理若干线程对象,没有任务的时候,这些线程都处于等待空闲状态。如果有新的线程任务,就分配一个空闲线程执行。如果所有线程都处于忙碌状态,线程池会创建一个新线程进行处理或者放入队列(工作队列)中等待。原创 2023-08-19 22:04:29 · 12520 阅读 · 0 评论 -
池化技术介绍
提前保存大量的资源,以备不时之需以及重复使用。池化技术应用广泛,如内存池,线程池,连接池等等。内存池相关的内容,建议看看 Apache、Nginx 等开源 web 服务器的内存池实现。由于在实际应用当做,分配内存、创建进程、线程都会设计到一些系统调用,系统调用需要导致程序从用户态切换到内核态,是非常耗时的操作。因此,当程序中需要频繁的进行内存申请释放,进程、线程创建销毁等操作时,通常会使用内存池、进程池、线程池技术来提升程序的性能。原创 2023-08-19 21:41:27 · 11584 阅读 · 0 评论 -
ThreadLocal使用与原理
ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。这里有几点需要注意:因为每个 Thread 内有自己的实例副本,且该副本只能由当前 Thread 使用。原创 2023-06-30 15:46:00 · 12556 阅读 · 0 评论 -
高并发编程:线程池
线程池首先有几个接口先了解第一个是Executor,第二个是ExecutorService,在后面才是线程池的一个使用ThreadPoolExecutor。Executor看它的名字也能理解,执行者,所以他有一个方法叫执行,那么执行的东西是Runnable,所以这个Executor有了之后呢由于它是一个借口,他可以有好多实现,因此我们说,有了Executor之后呢,我们现场就是一个任务的定义,比如Runnable起了一个命令的意思,他的定义和运行就可以分开了,不像我们以前定义一个Thread,new一个Th原创 2023-06-11 16:13:12 · 12589 阅读 · 0 评论 -
Exchanger
exchanger你可以把它想象成一个容器,这个容器有两个值,两个线程,有两个格的位置,第一个线程执行到exchanger.exchange的时候,阻塞,但是要注意我这个exchange方法的时候是往里面扔了一个值,你可以认为吧T1扔到第一个格子了,然后第二个线程开始执行,也执行到这句话了,exchange,他把自己的这个值T2扔到第二个格子里。怎么交换呢,看这里,我第一个线程有一个成员变量叫s,然后exchanger.exchange(s),第二个也是这样,t1线程名字叫T1,第二个线程名字叫T2。原创 2023-06-06 21:00:01 · 11433 阅读 · 0 评论 -
Semaphore
公平这个事儿是有一堆队列在哪儿等,大家伙过来排队。用这个车道和收费站来举例子,就是我们有四辆车都在等着进一个车道,当后面在来一辆新的时候,它不会超到前面去,要在后面排着这叫公平。如果我 Semaphore s = new Semaphore(1) 写的是1,我取一下,acquire一下他就变成0,当变成0之后别人是acquire不到的,然后继续执行,线程结束之后注意要s.release(),执行完该执行的就把他release掉,release又把0变回去1,还原化。我们来聊这个Semaphore,信号灯。原创 2023-06-06 20:51:07 · 11637 阅读 · 0 评论 -
Phaser
作为一个婚礼来说它会分成好几个阶段,第一阶段大家好都得到齐了,第二个阶段大家开始吃饭, 三阶段大家离开,第四个阶段新郎新娘入洞房,那好,每个人都有这几个方法,在方法的实现里头我就简单的睡了1000个毫秒,我自己写了一个方法,把异常处理写到了方法里了。Phaser是按照不同的阶段来对线程进行执行,就是它本身是维护着一个阶段这样的一个成员变量,当前我是执行到那个阶段,是第0个,还是第1个阶段啊等等,每个阶段不同的时候这个线程都可以往前走,有的线程走到某个阶段就停了,有的线程一直会走到结束。原创 2023-06-06 20:43:15 · 11476 阅读 · 0 评论 -
CyclicBarrier的使用
下面程序,两个参数,第二个参数不传也是可以的,就是满了之后不做任何事情。什么时候满了20人了就发车。举例:CyclicBarrier的概念呢比如说一个复杂的操作,需要访问 数据库,需要访问网络,需要访问文件,有一种方式是顺序执行,挨个的都执行完,效率非常低,这是一种方式,还有一种可能性就是并发执行,原来是1、2、3顺序执行,并发执行是不同的线程去执行不同的操作,有的线程去数据库找,有的线程去网络访问,有的线程去读文件,必须是这三个线程全部到位了我才能去进行,这个时候我们就可以用CyclicBarrier。原创 2023-06-06 20:34:49 · 11413 阅读 · 0 评论 -
JUC源码分析:通过ReentrantLock阅读AbstractQueuedSynchronizer源码
ReentrantLock进行上锁的流程如下图所示,我们将按照下面的流程分析ReentrantLock上锁的流程。点击acquire方法进入AbstractQueuedSynchronizer.acquire方法。再看另一个条件acquireQueued(addWaiter(Node.EXCLUSIVE)。再进入内部类NonfairSync的lock方法。先进入ReentrantLock.lock方法。之后它会从队列中不断请求获取线程,直到获取为止。addWaiter方法将当前线程放入阻塞队列中。原创 2023-06-06 07:16:33 · 11544 阅读 · 0 评论 -
Java面试题系列——JavaSE面试题(线程一)
Java面试题系列——JavaSE面试题(线程一)原创 2022-05-30 18:27:41 · 11592 阅读 · 0 评论 -
Java面试题系列——JavaSE面试题(线程五)
Java面试题系列——JavaSE面试题(线程五)原创 2022-06-03 21:22:34 · 11521 阅读 · 0 评论 -
Java面试题系列——JavaSE面试题(线程六)
Java面试题系列——JavaSE面试题(线程六)原创 2022-06-05 20:14:50 · 11609 阅读 · 0 评论 -
Java面试题系列——JavaSE面试题(线程三)
Java面试题系列——JavaSE面试题(线程三)原创 2022-06-01 20:06:34 · 11530 阅读 · 0 评论 -
Java面试题系列——JavaSE面试题(线程二)
Java面试题系列——JavaSE面试题(线程二)原创 2022-06-01 13:57:44 · 11475 阅读 · 0 评论 -
Java面试题系列——JavaSE面试题(线程四)
Java面试题系列——JavaSE面试题(线程四)原创 2022-06-02 19:10:30 · 11637 阅读 · 0 评论 -
springboot实现多线程
springboot实现多线程原创 2022-06-08 08:25:31 · 13116 阅读 · 0 评论