use*_*530 9 java multithreading threadpool
我目前正在考虑如何在Java中设计一个需要进行大量网络处理和数据库存储的多线程系统.该程序将首先启动三个基本线程.沿着这些基本线程,我想启动其他线程不是来自主程序,而是来自两个线程.是否有可能一个线程启动另一个线程,导致某种层次结构,如:
> Parent ->t0 thread1 -> t1 tread1.1
> ->t0 thread2
> ->t0 thread3 -> t2 thread3.1
t0= inital time
t1,t2 = time at a point in the running thread
t1 != t2
Run Code Online (Sandbox Code Playgroud)
如果没有,有人可以提供参考的理论解决方案吗?
小智 9
是的,您可以根据需要启动任意数量的线程,但这可能不是最好的方法.使用非阻塞API会更好,这样你就可以开始执行一些外部调用,并且调用线程可以立即开始执行其他操作而无需等待socket/database调用返回.然后,当套接字/数据库调用返回时,将触发回调以完成该处理.
非阻塞I/O可以提供更高的CPU利用率,因为您只是触发调用并注册回调而不必尝试平衡"正确"数量的并发线程,这些并发线程大多只是正在睡觉.
http://www.owlmountain.com/tutorials/NonBlockingIo.htm
要回答这个问题,是的,线程可以启动其他线程。
等级制度重要吗?
您最好使用带有缓存线程池的ExecutorService 。这样你就可以池化线程而不是创建很多线程(这很昂贵)。ExecutorServices 还提供了其他很酷的东西,并且将 Callables / Runnables 与它们一起使用可能比自己处理线程更容易测试。