From c4a695b45b106d0256c60903676dd98942e4ed33 Mon Sep 17 00:00:00 2001 From: SoYoung-zzy <768688119@qq.com> Date: Sun, 21 Feb 2021 22:51:55 +0800 Subject: [PATCH] =?UTF-8?q?update=20java=E5=B9=B6=E5=8F=91=E7=BC=96?= =?UTF-8?q?=E7=A8=8B/=E5=B9=B6=E5=8F=913.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\345\271\266\345\217\2213.md" | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git "a/java\345\271\266\345\217\221\347\274\226\347\250\213/\345\271\266\345\217\2213.md" "b/java\345\271\266\345\217\221\347\274\226\347\250\213/\345\271\266\345\217\2213.md" index 697ad8a..21d56ee 100644 --- "a/java\345\271\266\345\217\221\347\274\226\347\250\213/\345\271\266\345\217\2213.md" +++ "b/java\345\271\266\345\217\221\347\274\226\347\250\213/\345\271\266\345\217\2213.md" @@ -428,7 +428,7 @@ Tomcat 在哪里用到了线程池呢 1. LimitLatch 用来限流,可以控制最大连接个数,类似 J.U.C 中的 Semaphore 后面再讲 2. Acceptor 只负责【接收新的 socket 连接】 3. Poller 只负责监听 socket channel 是否有【可读的 I/O 事件】 -4. 一旦可读,封装一个任务对象(socketProcessor),提交给 Executor 线程池处理 +4. 一旦可读,封装一个任务对象(socketProcessor,实现了runnable),提交给 Executor 线程池处理 5. Executor 线程池中的工作线程最终负责【处理请求】 Tomcat 线程池扩展了 ThreadPoolExecutor,行为稍有不同 @@ -482,6 +482,8 @@ Connector 配置 ![1594993208807](https://gitee.com/gu_chun_bo/picture/raw/master/image/20200718221925-927.png) +poller是采用多路复用,一个线程就可以监听多个channel + Executor 线程配置 @@ -882,6 +884,8 @@ static final class NonfairSync extends Sync { #### 2. 可重入原理 +说白了就是state作为一个计数器,判断持有锁的线程是否是现在想获得锁的线程,如果是累加计数,只有计数变为0才释放锁。 + ```java static final class NonfairSync extends Sync { // ... -- Gitee