在使用java多线程时遇到了问题,困惑

liuyyuns 2011-08-02 10:15:38
我在项目中为了使用异步,就选择了多线程,刚开始是挺好的,但是运行了几天发现了问题,当访问量大的时候,会创建好多线程,每一个线程都在请求同一个服务,就会有线程处于阻塞状态,最后会导致系统资源耗尽,处于宕机状态。
这种问题该如何解决?或者是我想给每一个线程3秒钟的时间,3秒钟之后就让线程stop了。
求思路。
...全文
177 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liuyyuns 的回复:]
引用 1 楼 zl3450341 的回复:
用线程池吧。

ExecutorService pool = Executors.Fixed.....(线程数);
....
....很容易用。

跟数据库连接池道理一样。

用线程池试试,比如线程池最多可以有100个线程,但是当有101个线程的时候该怎么办?
[/Quote]
线程池可以选择策略的
ThreadPoolExecutor.AbortPolicy
ThreadPoolExecutor.CallerRunsPolicy
ThreadPoolExecutor.DiscardOldestPolicy
ThreadPoolExecutor.DiscardPolicy
就看你自己想怎么处理
ekvv9x3p 2011-08-02
  • 打赏
  • 举报
回复
线程池就可以啊 很好 用的
meran 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liuyyuns 的回复:]
引用 1 楼 zl3450341 的回复:
用线程池吧。

ExecutorService pool = Executors.Fixed.....(线程数);
....
....很容易用。

跟数据库连接池道理一样。

用线程池试试,比如线程池最多可以有100个线程,但是当有101个线程的时候该怎么办?
[/Quote]
101 个就阻塞等待,等哪个线程空了就 用那个线程服务。 线程池自己调度
meran 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zl3450341 的回复:]
用线程池吧。

ExecutorService pool = Executors.Fixed.....(线程数);
....
....很容易用。

跟数据库连接池道理一样。
[/Quote]
这家伙上班就是逛csdn的
liuyyuns 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zl3450341 的回复:]
用线程池吧。

ExecutorService pool = Executors.Fixed.....(线程数);
....
....很容易用。

跟数据库连接池道理一样。
[/Quote]
用线程池试试,比如线程池最多可以有100个线程,但是当有101个线程的时候该怎么办?
飞跃颠峰 2011-08-02
  • 打赏
  • 举报
回复
1楼说得对
听1楼的
zl3450341 2011-08-02
  • 打赏
  • 举报
回复
用线程池吧。

ExecutorService pool = Executors.Fixed.....(线程数);
....
....很容易用。

跟数据库连接池道理一样。
wangbin0016 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 liuyyuns 的回复:]
我用的Timer设置了3秒钟,但是没有起到作用,线程还是继续执行,直到抛出了超时异常。


那可能是你线程在请求服务 。 阻塞在哪里,然后超时后 抛出异常。

这个时候 即使你用 interrupted 是不起作用的。直接stop也不是很好。stop方法是不安全的
liuyyuns 2011-08-02
  • 打赏
  • 举报
回复
我用的Timer设置了3秒钟,但是没有起到作用,线程还是继续执行,直到抛出了超时异常。
蒙奇D路飞 2011-08-02
  • 打赏
  • 举报
回复
既然你都说了不想让它等,那就设置个计时器,到了时间没有反应,就杀死线程喽
etnet 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 liuyyuns 的回复:]

线程池解决不了我的问题,如果有100个线程,每个线程都在请求服务,而服务是断开的,永远都不会请求成功,会一直处于等待,直到抛出链接超时异常。
我就是想让线程死掉。
[/Quote]

那么你没有什么办法判断服务是不是可用吗?或者设定一个较短的超时时间.
贪睡的兔子 2011-08-02
  • 打赏
  • 举报
回复
隔三秒把线程池里的线程全杀死,弄个计数器
liuyyuns 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zaibuzhankkk 的回复:]
第101个线程就会等。。等啊等
[/Quote]
我不想让它等
再不斩 2011-08-02
  • 打赏
  • 举报
回复
第101个线程就会等。。等啊等
soli11722984 2011-08-02
  • 打赏
  • 举报
回复
那就设置个超时时间,超过了,就关了
liuyyuns 2011-08-02
  • 打赏
  • 举报
回复
线程池解决不了我的问题,如果有100个线程,每个线程都在请求服务,而服务是断开的,永远都不会请求成功,会一直处于等待,直到抛出链接超时异常。
我就是想让线程死掉。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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