【发布时间】:2011-07-05 15:57:32
【问题描述】:
我有一个获取不同网页的多线程应用程序。为此,我设计了线程之间的父子关系。 父级只是从其页面中获取不同的 url 并产生新线程。这些线程不断地获取页面,直到页面发生变化。主线程每 2 分钟轮询一次主页面的更改(如果有任何更改,则创建新线程)
主线程算法
while(true){
find_new_instances(...);
if we get any new, then
Thread.start(...);
Thread.sleep(120000);
}
主线程有一个字符串数组列表,用于存储它创建的每个新线程的 url。我听说线程应该只使用不可变对象进行写入。此处使用可变列表是否会导致问题? 在子线程中,进行页面获取和数据库插入等活动。
但是,应用程序会逐渐增加其内存需求并最终死锁/饿死到冻结状态或 OutOfMemory(如果不是)。的线程太大。 我无法尝试任何东西。如果您遇到过类似的问题,请提出建议。
【问题讨论】:
-
线程数是多少?这个循环将在很短的时间内创建大量线程,并使每个线程休眠很长时间。这对我来说没有多大意义......
-
@Random:线程数在 50 左右(其他的被创建和销毁)
-
@nos: 线程之间不进行数据共享,只有父/主线程保持对运行线程的计数
标签: java multithreading memory-management thread-safety