线程重用问题

dokia123 2014-06-25 05:41:30
现在遇到一个问题:
有一个网站,当前有两种访问方式:一个是直接通过浏览器访问;一个是通过webservice来访问。在每一次访问中,我分别会打印出线程id号,有时候会出现两种请求的线程id号一样的情况(两次请求方式先后访问)。
所以我现在怀疑:
①.只是线程id号重用了。
②.两次访问请求用的同一个线程。就是线程重用了。

之所以我会认为可能是第二种情况,是因为还有另一个现象,容我慢慢道来:
目前系统里面有个应用用到了ThreadLocal,用来存储某一个变量,而在使用webservice访问时,会往ThreadLocal里面放一个变量;然后我又通过浏览器访问时,此时线程id跟之前的webservice访问的线程id一样,而且我也可以从ThreadLocal里面拿到之前通过webservice方式访问时放到里面的变量。
出现这种现象,是不是第一次通过webservice访问时的线程没有销毁,第二次通过浏览器访问,直接用的之前的线程啊???
...全文
144 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯狂的玖号 2014-06-26
  • 打赏
  • 举报
回复
学习了,线程都是是懂非懂的感觉。哎。大神们要把经验都讲出来,让我们这样的娃子学习学习啊
qq_16916337 2014-06-26
  • 打赏
  • 举报
回复
帅死,很实用
晓风吹雾 2014-06-25
  • 打赏
  • 举报
回复
不可能就为你一个request单独创建一个线程,完成任务后销毁。 这样系统花费太大。 一般都是线程池,即使是nio 也都是使用 线程池来处理的。
疯癫行者 2014-06-25
  • 打赏
  • 举报
回复
引用 3 楼 dokia123 的回复:
引用 2 楼 stonefeng 的回复:
Web Server提供服务的时候,重用线程比创建新线程的效率高。
servlet是有个线程池来管理线程吗?
这个我想一般web server的实现都会使用线程池管理线程的,这个原因是显而易见的。
引用 4 楼 dokia123 的回复:
引用 1 楼 stonefeng 的回复:
是的,Servlet服务里面的线程是重用的。
那通过socket访问的线程,会不会重用之前通过http访问的线程呢?
你的socket链接是通过同一个Web Server进行的吗?还是自己创建socket服务的?是否共用线程池,要看web server的实现方式。如果自己创建的socket服务,就跟web Server的线程池没有关系。如果你自己通过socket访问由web server提供的http服务,就有可能共用线程池。
dokia123 2014-06-25
  • 打赏
  • 举报
回复
引用 1 楼 stonefeng 的回复:
是的,Servlet服务里面的线程是重用的。
那通过socket访问的线程,会不会重用之前通过http访问的线程呢?
dokia123 2014-06-25
  • 打赏
  • 举报
回复
引用 2 楼 stonefeng 的回复:
Web Server提供服务的时候,重用线程比创建新线程的效率高。
servlet是有个线程池来管理线程吗?
疯癫行者 2014-06-25
  • 打赏
  • 举报
回复
Web Server提供服务的时候,重用线程比创建新线程的效率高。
疯癫行者 2014-06-25
  • 打赏
  • 举报
回复
是的,Servlet服务里面的线程是重用的。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧