当前位置:编程学习 > JAVA >>

听说jdk1.6对线程池有个什么优化来着,有人知道么?

就是比如有个大小为100的线程池,但是我现在一下来了10000个线程,咋整?
感谢国家,感谢大家! --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 最大100线程。可是并发来了1000个。线程池有自已的策略。通常称之为线程策略。
1、中止饱和策略。就是当线程满后,就处在饱和状态了。
2、调用者运行策略,不处理请求,也不遗弃请求。
3、遗弃策略。就是线程满了后,过来的请求或线程遗弃掉,不再受理。
4、遗弃旧策略。把老的遗弃掉,用新的请求代替之。
--------------------编程问答-------------------- 哪家的jdk哦 --------------------编程问答-------------------- 像你的问题。一次来了1000个线程。那肯定是只处理100个。其余的900个处理wait状态,等待执行。等100个当中有一个或多个执行完后,在notify 其余的900进行随机唤醒操作。 --------------------编程问答--------------------
引用楼主 jack460 的回复:
就是比如有个大小为100的线程池,但是我现在一下来了10000个线程,咋整?
感谢国家,感谢大家!

已经有10000个线程了,  还要池干嘛?
应该是有100的线程的池, 10000个任务等待处理;
那当然是这100个线程谁有空谁就去取一个任务来完成, 直到处理完所有任务就wait; 有新的任务时线程又醒来继续执行任务 --------------------编程问答-------------------- 还没看到多线程啊··· --------------------编程问答-------------------- 是这么回事,但是怎么实现的?就是任务并发量太大,怎么办呢?
引用 6 楼 houjin_cn 的回复:
引用楼主 jack460 的回复:
就是比如有个大小为100的线程池,但是我现在一下来了10000个线程,咋整?
感谢国家,感谢大家!

已经有10000个线程了, 还要池干嘛?
应该是有100的线程的池, 10000个任务等待处理;
那当然是这100个线程谁有空谁就去取一个任务来完成, 直到处理完所有任务就wait; 有新的任务时线程又醒来继续执行任务
--------------------编程问答--------------------
引用 8 楼 jack460 的回复:
是这么回事,但是怎么实现的?就是任务并发量太大,怎么办呢?

这10000个任务都是必须完成的吗?优先级一样的吗?
如果是,那么没有办法, 事情总得做, 如果待完成的任务越来越多,来不及处理,  那么,这个问题不是软件可以解决的, 只好用更好的服务器或多个服务器一起处理 --------------------编程问答-------------------- 另外, 如果这些任务占用CPU其实不高(大多数时间在等待)的话,  可以考虑线程池中用更多的线程 --------------------编程问答-------------------- --------------------编程问答-------------------- 有的挖 LZ还我的下载里的这个例子
传送门 --------------------编程问答-------------------- 什么意思?
引用 10 楼 houjin_cn 的回复:
另外, 如果这些任务占用CPU其实不高(大多数时间在等待)的话, 可以考虑线程池中用更多的线程
--------------------编程问答-------------------- thx,学习
引用 12 楼 binyao02123202 的回复:
有的挖 LZ还我的下载里的这个例子
传送门
--------------------编程问答-------------------- 10000个线程?设计有问题,不要搞了,重新架构设计把 --------------------编程问答--------------------
引用楼主 jack460 的回复:
就是比如有个大小为100的线程池,但是我现在一下来了10000个线程,咋整?
感谢国家,感谢大家!


Windows 每个进程最多只允许 2000 个线程,Linux 每个进程最多只允许 1000 个左右,我不知道这 10000 个线程是咋来的?

在 Windows 上每个线程需要占用 1MB 左右的内存空间,100000 个线程需要有 10GB 的内存空间,这还只是线程占用的,因此,这问题纯属瞎掰,没有实际意义! --------------------编程问答--------------------
引用 16 楼 bao110908 的回复:
引用楼主 jack460 的回复:
就是比如有个大小为100的线程池,但是我现在一下来了10000个线程,咋整?
感谢国家,感谢大家!


Windows 每个进程最多只允许 2000 个线程,Linux 每个进程最多只允许 1000 个左右,我不知道这 10000 个线程是咋来的?

在 Windows 上每个线程需要占用 1MB 左右的内存空间,100000 个线程需要有 10G……



楼主的表达有错误,照我理解是来了10000个请求,而不是10000个线程
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,