关于JIoEndpoint的线程创建的名字
JIoJointPoint.startInternal创建AsyncTimeout线程:
Thread timeoutThread = new Thread(new AsyncTimeout(),
getName() + "-AsyncTimeout");
当时比较疑惑getName
里的name是在哪里设置的。一路跟踪才知道是在AbstractProtocol.init
中调用的:
String endpointName = getName(); // ""http-bio-8080"",注意这里是有双引号的。
endpoint.setName(endpointName.substring(1, endpointName.length()-1)); // 把双引号去掉
startAcceptorThreads线程数
int count = getAcceptorThreadCount();
跟踪代码发现,在AbstractProtocol.init
中调用
endpoint.init();
然后调用AbstractEndpoint.init
public final void init() throws Exception {
testServerCipherSuitesOrderSupport();
if (bindOnInit) {
bind();
...
进而调用JIoEndpoint的bind:
@Override
public void bind() throws Exception {
// Initialize thread count defaults for acceptor
if (acceptorThreadCount == 0) {
acceptorThreadCount = 1;
}
...
在此设置为了1。
总结
原文方法
@Override
public void startInternal() throws Exception {
if (!running) {
...
startAcceptorThreads();
// Start async timeout thread
Thread timeoutThread = new Thread(new AsyncTimeout(),
getName() + "-AsyncTimeout");
timeoutThread.setPriority(threadPriority);
timeoutThread.setDaemon(true);
timeoutThread.start();
}
}
startAcceptorThreads();
创建了Acceptor守护进程, 另外几行则创建了AsyncTimeout进程。
总而言之: 在JIoEndpoint.start
内会创建Acceptor和AsyncTimeout进程。
学习方法总结
要多用idea的全文搜索"ctrl+shift+f"和类全文搜索"ctrl+shift+n"
网友评论