tomcat线程池中的线程和代码中的线程有什么关系

每个请求到tomcat服务器,他都会开一个线程,那么如果某个用户请求进来后,做了一个操作A,这个操作要很长时间才能执行完,所以代码中对其进行了处理,即new了一个线程出来,让线程去执行。现在我想问的是new 出来的这个线程和tomcat服务器的线程有没有关系,也就是说本来tomcat线程池中最多只能连接五百个请求,现在有200个人进来了,那么还剩三百个,两百个人同时执行了该操作A,是不是意味着tomcat只剩下100个线程可以用了

1个回答

不一样,但是能不能起500个线程,跟机器性能有关。

qq_30218697
社会你强哥 回复t2045817161: 我理解的和你一样
10 个月之前 回复
woshilijiuyi
张书康 回复t2045817161: 和你有一样的疑惑。我的想法是,tomcat线程池只是用来处理请求的,spring开启的线程只是用来处理业务逻辑。但是所有的线程还是和机器有关。所以springmvc整合了异步线程的功能,主要是用来解决 tomcat中的线程在处理请求时发生阻塞的情况,原理就是用spring中的线程来响应的结果。
一年多之前 回复
inrtyx
inrtyx 回复t2045817161: 线程是跟你的服务器相关,跟tomcat无关,tomcat起线程,最终本质也是服务器的线程
接近 2 年之前 回复
zs770635620
天天写bug 回复t2045817161: 同问
大约 2 年之前 回复
t2045817161
t2045817161 意思就是代码中new Thread 不会算在tomcat服务器的线程中去了,不过可能会对机器性能有影响,是这个意思吗
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
线程池中的线程工厂
倒数第二个参数就是我们的主角,线程工厂,顾名思义就是用来生成线程的工厂,为了创建具有相似特性的线程所以使用它,例如守护线程等  
线程池中的线程变量
线程池中的线程变量 做过后台开发的,应该都知道线程变量这个东西,能保证每个线程拿到的数据与别的线程不同,只要做简单的set/get 操作,就可以。 —– 这是前提 —– 今天做开发,需要在内层函数中传数据到外层,一种文案是,层层return,这种方法可以实现,but 我调用了三层方法,意味着至少改四处,更多的修改意味着更多的bug,然后就想到有个神奇的线程变量可以使用。 代码一阵修改,上...
线程池中的线程做完任务后怎么回到线程池中
现有任务队列 TaskQueenrn线程池 ThreadPool,初始化时线程池中的线程都是挂起的rn从任务队列中获取一个任务,再线程中获取一个挂起的线程,给线程类装上任务,唤醒线程执行。rn线程执行完后是怎么回到线程池中的?rnrn
runloop 和线程有什么关系
每条线程都有唯一的一个 RunLoop 对象与之对应的 主线程的 RunLoop 是自动创建并启动 子线程的 RunLoop 需要手动创建 子线程的 RunLoop 创建步骤如下: 在子线程中调用[NSRunLoop currentRunLoop]创建 RunLoop 对象(懒加载,只创建一次) 获得RunLoop对象后要调用run方法来启动一个运行循环 //启动Ru
java线程池和关闭线程池中的线程
如果线程经常喜欢去new的话是不对的,你需要一个池子管理。当然放倒线程池里的东西就随他而去吧,你就不要去尝试关闭了,如果想去关闭的话,还是老老实实的new吧~newCachedThreadPool 这个一个带缓存的线程池,是个可以无限大的线程池,新建的线程放倒这个池子里,当线程停掉了的时候,下个个线程进来,可以复用这个线程。 newFixedThreadPool 是个有长度的线程池,与上一个不同的
知识库--如何将线程池中的线程退出(115)
使用工厂方法的一个classpublic class EnergySource { private final long MAXLEVEL = 100; private long level = MAXLEVEL; private static final ScheduledExecutorService replenishTimer = Executors.newScheduled
C# 线程池中取消线程的三种方式
三种方式都使用CancellationToken,只是使用方式不同,有类似于采用全局标志位的方式 第一种 检测IsCancellationRequested方式 static void AsyncOperation1(CancellationToken token) { Console.WriteLine("starting the fi
请问怎样终止线程池中的线程
WaitCallback async = new WaitCallback(thread);rnThreadPool.QueueUserWorkItem(async,null);rnrn请问怎么终止它
线程池中的排队策略
ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) 排队...
线程池中使用Callable
jvm在线程池中得到可用线程,接着就可以执行线程的方法,线程默认可以使用实现了Runnable接口的线程。如下代码:package com.xxx.future; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class NoFuture { public st...
【网络编程】线程池中各线程的同步
使用pthread_cond_singal需要注意的地方: 1,pthread_cond_signal在多处理器上可能同时唤醒多个线程,当你只能让一个线程处理某个任务时,其它被唤醒的线程就需要继续 wait,while循环的意义就体现在这里了,而且规范要求pthread_cond_signal至少唤醒一个pthread_cond_wait上 的线程,其实有些实现为了简单在单处理器上也会唤醒多个线
java设置线程池中线程的名字
项目中使用ThreadPoolExecutor进行多线程开发。使用起来很方便,但是当用jstack查看堆栈信息或者Jprofiler调试性能的时候,看到的线程都是pool-1-thread-1\2\3\4之类的。如果一个系统中用到了多个线程池,就无法区分哪个线程造成的系统问题。所以每次都需要点 Thread Dumps 去查看线程执行的具体的代码与堆栈信息,推测是哪个地方出的问题。 于是
没办法了,C#如何调用线程池中的线程
使用ThreadPool类的方法rnSystem.Threading.WaitCallback wc1 = new System.Threading.WaitCallback(t1.fa1); rnSystem.Threading.ThreadPool.QueueUserWorkItem(wc1);rn把wc1放入线程池中,但通过什么才可调用到该wc1委托即调用t1.fa1()方法啊.rn
如何结束线程池中的所有线程
如题,如果线程池中正在运行的有400线程,如何结束所有线程
可以清空线程池中的线程吗?
我正在用vb.net写一个rss阅读器,在批量更新频道时用到线程池。rn现在想问一下,有没有办法将加到线程池中的任务都取消掉?
主线程捕捉线程池中线程抛出的异常
package 线程池; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; /** * 主线程捕捉线程池中线程抛出的异常 * @author kevin4wang */ /** * E
线程池中的线程可以多次使用吗?
因为是服务程序,不想长期多次申请对象,以减少时间和内存消耗,所以将线程放入线程池中rnrn当线程已经完成工作任务,处于 !isAlive() 状态时,想再次使用该线程完成同样任务rnrnstart该线程后run没有响应,完全没有进入run里面rnrn有办法重设该线程状态,让它多次执行吗?
线程的入口和数据块有什么关系?
线程有什么数据是固定的?
线程池中某个线程出现异常会怎样?
这个问题还真从来没想过..直到有一天看到过这样的问题。 package com.wy.MyThread; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ThreadPoolExecutor; impo...
关于线程池中线程失败的问题
我创建了一个Excutor,往里面扔了3个callable并将引用保存到一个map中,过一段时间来查看线程执行结果的时候,发现有一个任务失败了。伪代码如下:rn装入:rnfor(..)rnFuture<> future = exec.submit(task);rnmap.put(taskName, future);rnrn查看执行结果rnwhile(Future<> future : map.entry)rnfuture .get();rnrn这时,我发现这三个线程中有一个线程执行失败了,而业务又不允许有失败,因此必须重新执行。此时该怎么处理比较恰当又代码没那么臃肿繁琐呢?rn求大神解答,谢谢
如何KILL调 线程池中的线程
在应用程序退出时因为线程池中还有线程存活,从而导致在WINDOWS 任务管理器中仍然可以看到该进程存活着,请问如何才能一次性删除掉线程池中所有线程。
线程池中的坑
1、Spring的线程池定义如下 &amp;lt;bean id=&quot;threadPoolExecutor&quot; class=&quot;org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor&quot;&amp;gt; &amp;lt;property name=&quot;corePoolSize&quot; value=&quot;3&quot;/&amp;gt;
线程池中的ThreadGroup坑
前言在Java中每一个线程都归属于某个线程组管理的一员,例如在主函数main()主工作流程中产生一个线程,则产生的线程属于main这个线程组管理的一员。简单地说,线程组(ThreadGroup)就是由线程组成的管理线程的类,这个类是java.lang.ThreadGroup类。 定义一个线程组,通过以下代码可以实现。 ThreadGroup group=new ThreadGroup(“grou
利用线程工厂设定线程池中线程名称
1、实现线程工厂接口 public class SmsThreadFactory implements ThreadFactory { //线程名称 private String sendcode; public SmsThreadFactory(String sendcode) { this.sendcode=sendcode; } ...
Tomcat线程
可以通过调节并发线程数来对tomcat自身进行优化。 tomcat中service.xml配置如下:          Executor name="tomcatThreadPool" namePrefix="catalina-exec-"          maxThreads="150" minSpareThreads="4"/>     -->
线程,线程,线程----------还是线程
viod duo()rnrn ...rnrnrnprivate void StartPause(object sender, System.EventArgs e)rnrn int _ThreadNum = threadCount; rn for(int i=0;i<_ThreadNum;i++)rn rn Thread[] mythread = new Thread [ _ThreadNum ] ; rn mythread[i] = new Thread(new ThreadStart(duo));rn t.Start();rn rn rnrn问题一:上面的,用多个线程去执行同一个函数duo();是错误的?rn问题二:用多个线程去执行,duo();是不是可以提升执行的速度?
Tomcat中的线程配置
一、概述     tomcat中在server.xml中配置线程,可以在connector中配置,也可以配置executor,这两者之间的配置有什么区别?     具体配置内容,还请查看conf/server.xml配置文件,简单一目了然。 二、详解 1. 概述     连接器中的线程配置是私有的,连接器自己的配置只能自己使用;而线程池可以被共享,多个连接器通过executor属
线程池中常用的阻塞队列简述
一、ArrayBlockingQueue 基于数组的阻塞队列,有界队列,按照先进先出(FIFO)的形式,初始化是必须指定capacity.看一下源码: /**第一种构造方法,指定初始容量*/ public ArrayBlockingQueue(int capacity) { this(capacity, false); } /**第二种构造方法,指定初始容量和一个标志...
Android线程池中的任务取消
ExecutorService pool = Executors.newFixedThreadPool(2);    //创建实现了Runnable接口对象,Thread对象当然也实现了Runnable接口    Thread t1 = new MyThread();    Thread t2 = new MyThread();    Thread t3 = new MyThread();
线程中的线程
能在线程中在创建线程吗,即在线程执行入口函数中再创建线程?
线程 线程 还是线程!!!
以前讨教过的 先成的执行函数必须是静态或者是全局函数 但是现在发现当用到两个以上的线程的时候 如下所示 第三个线程函数编译时提示错误 rn error C2447: missing function header (old-style formal list?)rn怎么解决? rnrn...rnUINT SendWorker(LPVOID pParam);rnrnclass CICPDlg : public CDialogrnrnpublic:rn static UINT SubmitMultiSMS(LPVOID pParam);rn static UINT SubmitBYHD(LPVOID pParam); <-----rn .......
线程!线程!线程!!!
看到有的同学对bcb的线程认识不够深[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/20.gif][/img],特开一贴给同学们讲讲[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/19.gif][/img]。rnrn主要给出两种常用的线程形式[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/42.gif][/img]。rnrn1、长等待型线程示例,等待命令,执行不定长的工作,但每个工作的时间不会太长。rn2、长工作型线程示例,执行一个很长时间的工作,但可以很快响应取消操作。rnrn主程序rn[code=C/C++]rn//---------------------------------------------------------------------------rn#include "myThreadBUnit.h"rnmyThreadB *thb=NULL;rn//---------------------------------------------------------------------------rnvoid __fastcall TForm1::OnThreadMessage(TMessage& Message)rnrn //与线程约定了,显示字串并delete它.rn char *p=(char*)Message.LParam;rn Memo1->Lines->Add(p);rn delete p;rnrn //BEGIN_MESSAGE_MAPrn // MESSAGE_HANDLER(WM_USER+100,TMessage,OnThreadMessage);rn //END_MESSAGE_MAP(TForm)rnrn//---------------------------------------------------------------------------rnvoid __fastcall TForm1::Button1Click(TObject *Sender)rnrn //建立线程.rn if(thb==NULL)rn rn thb=new myThreadB(false);//创建线程并挂起,挂起的目的是向thb写参数.rn thb->self=&thb;rn thb->mainWin=Handle;rn thb->msgMsg=WM_USER+100;rn thb->Resume(); //运行线程.rn rnrn//---------------------------------------------------------------------------rnvoid __fastcall TForm1::Button2Click(TObject *Sender)rnrn //给线程一个命令.rn if(thb!=NULL)rn PostThreadMessage(thb->ThreadID,WM_USER+1000,1000,0);rnrn//---------------------------------------------------------------------------rnvoid __fastcall TForm1::Button3Click(TObject *Sender)rnrn //结束线程.rn if(thb!=NULL)rn rn if(!thb->exit())rn ShowMessage("线程退出超时!");rn rnrn//---------------------------------------------------------------------------rn[/code]rn线程,myThreadBUnit.hrn[code=C/C++]rn//---------------------------------------------------------------------------rn#ifndef myThreadBUnitHrn#define myThreadBUnitHrn//---------------------------------------------------------------------------rn#include rn//---------------------------------------------------------------------------rnclass myThreadB : public TThreadrnrnprivate:rn void __fastcall runInit();rn void __fastcall ShowMess(char *message);rnrnprotected:rn void __fastcall Execute();rnpublic:rn __fastcall myThreadB(bool CreateSuspended);rn __fastcall ~myThreadB(void); //析构函数.rn HANDLE mainWin; //主线程窗体.rn unsigned short int msgMsg; //与主线程通讯用,用于显示线程的消息.rn myThreadB **self; //可以把主线程中的线程指针置NULL.rn bool __fastcall exit(); //主线程调用,结束线程.rn;rn//---------------------------------------------------------------------------rn#endifrn[/code]rn线程,myThreadBUnit.cpprn[code=C/C++]rn//---------------------------------------------------------------------------rn#include rn#pragma hdrstoprnrn#include "myThreadBUnit.h"rn#pragma package(smart_init)rn//---------------------------------------------------------------------------rnrn// Important: Methods and properties of objects in VCL can only bern// used in a method called using Synchronize, for example:rn//rn// Synchronize(UpdateCaption);rn//rn// where UpdateCaption could look like:rn//rn// void __fastcall myThreadB::UpdateCaption()rn// rn// Form1->Caption = "Updated in a thread";rn// rn//---------------------------------------------------------------------------rn__fastcall myThreadB::myThreadB(bool CreateSuspended)rn : TThread(CreateSuspended)rnrn //这里的代码运行在父线程的上下文中.rnrn //无需显示使用delete,就可激活 析构函数.rn FreeOnTerminate=true;rn self=NULL;rn mainWin=NULL;rn msgMsg=0;rnrn//---------------------------------------------------------------------------rn__fastcall myThreadB::~myThreadB(void)rnrn char mess[32];rn wsprintf(mess,"thread:%d 退出",ThreadID);rn ShowMess(mess);rn if(self!=NULL)rn *self=NULL;rnrn//---------------------------------------------------------------------------rnvoid __fastcall myThreadB::runInit()rnrn //运行在当前线程环境中.rn char mess[32];rn wsprintf(mess,"thread:%d 建立",ThreadID);rn ShowMess(mess);rnrn//---------------------------------------------------------------------------rnvoid __fastcall myThreadB::Execute()rnrn MSG msg;rn int i=0;rn runInit();rnrn //第一种工作形式是长等待,只是偶尔有工作需要做,很快做完又处于等待状态.rn //比如标准的视频处理,每帧图像5ms处理完了,需要等35ms,下一帧图像才会来.rnrn ShowMess("长等待");rn while(true)//长等待型线程示例,等待命令,执行不定长的工作,但时间不会太长.rn rn //检查消息队列,消息队列中无消息则阻塞在此,因此我叫它长等待.rn GetMessage(&msg,NULL,0,-1);rn if(msg.message==WM_USER+1000) //其它线程发来命令了.rn rn Beep(1000,100);//模拟工作100毫秒.rnrn //和主线程通一下讯.rn char mess[32];rn wsprintf(mess,"thread:%d i:%d",ThreadID,i++);rn ShowMess(mess);rn rn else if(msg.message==0) //其它线程发来退出消息.rn rn if(msg.lParam!=0)rn SetEvent((void*)msg.lParam);rn break;rn rn rnrn //第二种工作形式,线程是长工作状态.rn //长工作又可分为两种形式,rn //一种是处于某个冗长的循环中,rn //一种是阻塞于某个事件或信号量中.rnrn ShowMess("长工作");rn while(true)//长工作型线程示例,执行一个很长时间的工作,但可以很快响应取消操作.rn rn //既便是处于长工作状态中,也要想办法至少每秒检查1次消息队列.rn //如果线程处于等待某个事件中而没有机会检查消息队列,参考exit()中的注释.rnrn //无论消息队列中有无消息,PeekMessage()都不阻塞线程.rn if(PeekMessage(&msg,NULL,0,-1,PM_REMOVE))rn rn if(msg.message==0) //主线程发来退出消息.rn rn if(msg.lParam!=0)rn SetEvent((void*)msg.lParam);rn break; //退出线程.rn rn rn Beep(1000,1000);//模拟长工作秒.rn rnrn//---------------------------------------------------------------------------rnbool __fastcall myThreadB::exit()rnrn //运行于调用线程的上下文中.rnrn HANDLE exitEvent;rn bool exitOK=true;rnrn exitEvent=CreateEvent(NULL,false,false,NULL);rn PostThreadMessage(ThreadID,0,0,(long)exitEvent);rn //如果线程阻塞于某个事件xxxEvent中,那么需要用SetEvent(xxxEvent)使线程解除阻塞,rn //以便线程有机会检查到上面发出的退出消息0.rnrn //如果线程没有快速的检查到退出消息,那么调用线程最多等待(被阻塞)2000ms.rn if(WAIT_TIMEOUT==WaitForSingleObject(exitEvent,2000))rn exitOK=false;rnrn CloseHandle(exitEvent);rn rn return exitOK;rnrn//---------------------------------------------------------------------------rnvoid __fastcall myThreadB::ShowMess(char *message)rnrn if(mainWin==NULL)rn return;rnrn char *newStr=new char[128];rn lstrcpyn(newStr,message,128);rn PostMessage(mainWin,msgMsg,0,(long)newStr);rn //不要在此delete newStr.rn //和主线程约定,newStr在主线程中delete.rnrn//---------------------------------------------------------------------------rn[/code]rnrn[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/39.gif][/img]rnrn
关于线程池中的阻塞队列BlockingQueue
       接上篇文章https://blog.csdn.net/GoSaint/article/details/84345210        对于BlockingQueue阻塞队列而言,常用在多线程生产者和消费者模型上。首先我们需要明确的是阻塞队列是线程安全的。或者可以称之为并发队列,是并发容器的一种规范。                    上图是BlockingQueue的实现类...
关于线程池中的WorkerThread和IOThread
ASP.Net里关于关于线程池中的WorkerThread和IOThread的设置如下:rnrnmaxWorkerThreads 5 到 100 按 CPU 配置用于进程的辅助线程的最大数目。例如,如果在单处理器服务器上,该值为 25,ASP.NET 将使用运行时 API 将进程限制设置为 25;在双处理器服务器上,限制被设置为 50。默认值为 20。rn rnmaxIoThreads 5 到 100 按 CPU 配置用于进程的 I/O 线程的最大数目。例如,如果在单处理器服务器上,该值为 25,ASP.NET 将使用运行时 API 将进程限制设置为 25;在双处理器服务器上,限制被设置为 50。默认值为 20。rnrn但在单CPU系统中,ThreadPool的maxWorkerThreads为25,而maxIoThreads是1000。我用C#写的一个服务端软件(不是asp.net),IOThreads达到了300多,是不是太大了?在300多人连接后,服务器比较卡。rn准备参照ASP.net的设置,把maxIoThreads从1000改为100。是不是有效,望与有相关经验的朋友交流。rnrnrn
Java线程池中BlockingQueue的作用
关于线程池中BlockingQueue的疑问 对于Java线程池,相信大家都或多或少使用过。关于其用法和原理介绍,网上已经有很多非常精彩的文章,珠玉在前,我就不献丑了。不了解的,可以参考这篇文章。今天我想讲的,是关于我对Java线程次的两个疑问,当然高手可以略过了。 1.为什么线程池要使用BlockingQueue,而不是ArrayList或别的什么列表? 2.既然使用了Blo...
Java线程池中BlockingQueue的作用
关于线程池中BlockingQueue的疑问 对于Java线程池,相信大家都或多或少使用过。关于其用法和原理介绍,网上已经有很多非常精彩的文章,珠玉在前,我就不献丑了。不了解的,可以参考这篇文章。今天我想讲的,是关于我对Java线程次的两个疑问,当然高手可以略过了。 1.为什么线程池要使用BlockingQueue,而不是ArrayLi...
java线程池中任务异常处理
首先我们看个例子,当使用线程池执行任务时如果某个任务出现异常会是什么效果import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;public class DivTask implements Ru
Java线程池中的异常消失
使用ExecutorService.submit()提交的任务会由于线程池自身的保护机制,不会将异常打印到控制台,所以不会看到,有时程序莫名其妙的结束就是因为这种情况可以这样Runnable crawlBlog = new Runnable() { public void run() { try { doSomething(); } c
线程的问题,有代码
如一下代码,线程应该是每隔一秒,label的值变化一次,加t1,可为什么只执行一次?rnusing System;rnusing System.Collections;rnusing System.Threading;rnnamespace comtransrnrn public class WebForm1 : System.Web.UI.Pagern rn private void Page_Load(object sender, System.EventArgs e)rn rn Thread thread1 = new Thread(new ThreadStart(Method1));rn thread1.Start();rn rn public void Method1()rn rn while(true)rn rn this.Label2.Text +="t1";rn System.Threading.Thread.Sleep(1000);rn rn rn rn
简单线程池中的互斥锁问题
[code=c] /* 工作者线程函数, 从任务链表中取出任务并执行 */rn 12: static void* rn 13: thread_routine(void *arg)rn 14: rn 15: tpool_work_t *work;rn 16: rn 17: while(1) rn 18: /* 如果线程池没有被销毁且没有任务要执行,则等待 */rn 19: pthread_mutex_lock(&tpool->queue_lock);rn 20: while(!tpool->queue_head && !tpool->shutdown) rn 21: pthread_cond_wait(&tpool->queue_ready, &tpool->queue_lock);rn 22: rn 23: if (tpool->shutdown) rn 24: pthread_mutex_unlock(&tpool->queue_lock);rn 25: pthread_exit(NULL);rn 26: rn 27: work = tpool->queue_head;rn 28: tpool->queue_head = tpool->queue_head->next;rn 29: pthread_mutex_unlock(&tpool->queue_lock);rn 30: //这里如果其他线程先获得锁,然后运行之后改变了work的值,而后下面这行代码再运行,会调用新的值么?rn 31: work->routine(work->arg);rn 32: free(work);rn 33: rn 34: rn 35: return NULL; rn 36: [/code]rnrn在网上看到一段线程池代码,关于互斥锁这儿没搞懂
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法