z****n 发帖数: 1933 | 1 假设我有一个synchronized method()。 意味着同一时间,对于特定object只有一个线
程可以访问它。 假设method()需要花1秒种才能结束。但是系统每100毫秒产生一个
新线程试图访问method(). 我猜想新线程会堆积起来。
这种状况一直持续下去,会有引起系统崩溃吗? 有什么好办法解决吗?
谢谢。 |
m****r 发帖数: 6639 | 2 没有办法. 你这个就是resource不够用. 如果你的code不能再优化的话.
【在 z****n 的大作中提到】 : 假设我有一个synchronized method()。 意味着同一时间,对于特定object只有一个线 : 程可以访问它。 假设method()需要花1秒种才能结束。但是系统每100毫秒产生一个 : 新线程试图访问method(). 我猜想新线程会堆积起来。 : 这种状况一直持续下去,会有引起系统崩溃吗? 有什么好办法解决吗? : 谢谢。
|
z****n 发帖数: 1933 | 3 这其实不是resource不够用的问题。很多时候,你是很难估计一个method要运行多少时
候的。只要method执行的时间比线程产生的时间长,这个问题就存在。
【在 m****r 的大作中提到】 : 没有办法. 你这个就是resource不够用. 如果你的code不能再优化的话.
|
m****r 发帖数: 6639 | 4 为什么这个method需要被synchronize? 难道不是因为他在用一个resource不能让别人
用?
【在 z****n 的大作中提到】 : 这其实不是resource不够用的问题。很多时候,你是很难估计一个method要运行多少时 : 候的。只要method执行的时间比线程产生的时间长,这个问题就存在。
|
p******w 发帖数: 62 | 5 典型的producer consumer问题。。。
【在 z****n 的大作中提到】 : 假设我有一个synchronized method()。 意味着同一时间,对于特定object只有一个线 : 程可以访问它。 假设method()需要花1秒种才能结束。但是系统每100毫秒产生一个 : 新线程试图访问method(). 我猜想新线程会堆积起来。 : 这种状况一直持续下去,会有引起系统崩溃吗? 有什么好办法解决吗? : 谢谢。
|
s******t 发帖数: 139 | 6 You may create a thread pool object and set the max number of the threads,
if the pool is full, no more threads can be put in. Then the system won't
crash but most threads will not have a chance to run. |
g*****g 发帖数: 34805 | 7 threadpool will help only if there are more than one accesses to the
resource available. If the resource access is exclusive, it all depends
on how quick the processing is and how quick new thread being created.
Think of a printer with lots of jobs, yes, they need to wait.
【在 s******t 的大作中提到】 : You may create a thread pool object and set the max number of the threads, : if the pool is full, no more threads can be put in. Then the system won't : crash but most threads will not have a chance to run.
|
t*******e 发帖数: 684 | 8 搞成stateless就不用synchronized了,或者prototype,多生产几个instances,每个
thread独占一个。这不就是spring framework了吗。
【在 m****r 的大作中提到】 : 为什么这个method需要被synchronize? 难道不是因为他在用一个resource不能让别人 : 用?
|
m****r 发帖数: 6639 | 9 不是所有的resource都可以说不synchronize就不synchronize. 所以我才问他为什么
现在是synchronized的. goodbug给的printer的例子就很好.
anyway, 我感觉是code有问题了.
【在 t*******e 的大作中提到】 : 搞成stateless就不用synchronized了,或者prototype,多生产几个instances,每个 : thread独占一个。这不就是spring framework了吗。
|
F****n 发帖数: 3271 | 10 让系统Check Availability不产生新线程。
【在 z****n 的大作中提到】 : 假设我有一个synchronized method()。 意味着同一时间,对于特定object只有一个线 : 程可以访问它。 假设method()需要花1秒种才能结束。但是系统每100毫秒产生一个 : 新线程试图访问method(). 我猜想新线程会堆积起来。 : 这种状况一直持续下去,会有引起系统崩溃吗? 有什么好办法解决吗? : 谢谢。
|
|
|
t*******e 发帖数: 684 | 11 你的问题是thread的生成不受你的控制,这个无解。否则自己定义了有上界的
threadpool就可以了。
【在 m****r 的大作中提到】 : 不是所有的resource都可以说不synchronize就不synchronize. 所以我才问他为什么 : 现在是synchronized的. goodbug给的printer的例子就很好. : anyway, 我感觉是code有问题了.
|
m****r 发帖数: 6639 | 12 这个... 不是我的问题. 是别人发的贴.
我认为他一个synchronized method需要几分钟, 这个不正常. 需要优化. 把真正需
要synchronized的地方synchronized.
【在 t*******e 的大作中提到】 : 你的问题是thread的生成不受你的控制,这个无解。否则自己定义了有上界的 : threadpool就可以了。
|
t*******e 发帖数: 684 | 13 抱歉,我也是抽空看一眼,没看仔细。
【在 m****r 的大作中提到】 : 这个... 不是我的问题. 是别人发的贴. : 我认为他一个synchronized method需要几分钟, 这个不正常. 需要优化. 把真正需 : 要synchronized的地方synchronized.
|
i******l 发帖数: 270 | 14 synchronized的部分显然要越短小越好, 他倒好, 跑个几分钟。
这个lock的粒度有问题。似乎应该这样,一次取一大块数据, 然后取消锁,
剩下的对数据的操作都是thread-local的。
【在 m****r 的大作中提到】 : 这个... 不是我的问题. 是别人发的贴. : 我认为他一个synchronized method需要几分钟, 这个不正常. 需要优化. 把真正需 : 要synchronized的地方synchronized.
|
r*****s 发帖数: 985 | 15 这个基础问题可以作个interview question,
呵呵
【在 i******l 的大作中提到】 : synchronized的部分显然要越短小越好, 他倒好, 跑个几分钟。 : 这个lock的粒度有问题。似乎应该这样,一次取一大块数据, 然后取消锁, : 剩下的对数据的操作都是thread-local的。
|
m****r 发帖数: 6639 | 16 所以我一直在说, 需要看看这个method里面在干吗. 我怀疑你的怀疑是正确的.
【在 i******l 的大作中提到】 : synchronized的部分显然要越短小越好, 他倒好, 跑个几分钟。 : 这个lock的粒度有问题。似乎应该这样,一次取一大块数据, 然后取消锁, : 剩下的对数据的操作都是thread-local的。
|