c********l 发帖数: 8138 | 1 目前有这么一个程序,共有如下三种线程:
1,GUI主线程, non-daemon
2,2个服务器线程,分别监听端口号为8000和8001的socket, non-daemon
3,每当服务器socket.accept()时,生成一个新的daemon线程,
然后在这些n个新生成的并发线程中处理具体业务。
所以,主线程,服务器线程,daemon线程,这三种线程目前是三个实现Runnable的类
上述设计比较过时,因为是用的非常传统的implements Runnable的教科书式方法
有没有更先进的,比如Future/Callable/ExecutorService?
如果是这样,那么具体应该如何改进? |
k**********g 发帖数: 989 | 2
#2 Selector?
【在 c********l 的大作中提到】 : 目前有这么一个程序,共有如下三种线程: : 1,GUI主线程, non-daemon : 2,2个服务器线程,分别监听端口号为8000和8001的socket, non-daemon : 3,每当服务器socket.accept()时,生成一个新的daemon线程, : 然后在这些n个新生成的并发线程中处理具体业务。 : 所以,主线程,服务器线程,daemon线程,这三种线程目前是三个实现Runnable的类 : 上述设计比较过时,因为是用的非常传统的implements Runnable的教科书式方法 : 有没有更先进的,比如Future/Callable/ExecutorService? : 如果是这样,那么具体应该如何改进?
|
g*****g 发帖数: 34805 | 3 configure a threadpool for your worker threads, keep others.
【在 c********l 的大作中提到】 : 目前有这么一个程序,共有如下三种线程: : 1,GUI主线程, non-daemon : 2,2个服务器线程,分别监听端口号为8000和8001的socket, non-daemon : 3,每当服务器socket.accept()时,生成一个新的daemon线程, : 然后在这些n个新生成的并发线程中处理具体业务。 : 所以,主线程,服务器线程,daemon线程,这三种线程目前是三个实现Runnable的类 : 上述设计比较过时,因为是用的非常传统的implements Runnable的教科书式方法 : 有没有更先进的,比如Future/Callable/ExecutorService? : 如果是这样,那么具体应该如何改进?
|
o**2 发帖数: 168 | 4 一般来说,程序能按当时设计的要求运行就是一个成功的程序。你是想与时俱进?还是
程序出现了问题?还是要扩充程序?
想学先进的并发编程技术的话,你可以看一下Fast Messenger Programming,包括主站
fastmessenger.com和我在本版发的post。
真想要refactor这个程序的话,你要做的第一件事是画出你的这个程序的thread模型图
。比如以一个thread为主线(也就是从execution path的角度),把该thread会执行到
的classes列在其名下,然后再列出有多个thread可能同时执行到的classes等。
【在 c********l 的大作中提到】 : 目前有这么一个程序,共有如下三种线程: : 1,GUI主线程, non-daemon : 2,2个服务器线程,分别监听端口号为8000和8001的socket, non-daemon : 3,每当服务器socket.accept()时,生成一个新的daemon线程, : 然后在这些n个新生成的并发线程中处理具体业务。 : 所以,主线程,服务器线程,daemon线程,这三种线程目前是三个实现Runnable的类 : 上述设计比较过时,因为是用的非常传统的implements Runnable的教科书式方法 : 有没有更先进的,比如Future/Callable/ExecutorService? : 如果是这样,那么具体应该如何改进?
|
o**2 发帖数: 168 | 5 有了这个thread模型设计图,才能跟据它来做设计和选用工具。
不过你提到了这是个GUI程序,建议你可以看看我post里的如何使用FMP针对GUI的示范
程序。
FMP 支持 JavaFX, Swing and SWT 中的 UI thread
http://www.mitbbs.com/article_t0/Programming/31254349.html
FMP tutorial
http://www.mitbbs.com/article_t0/Programming/31258831.html |
s*****n 发帖数: 5488 | 6 The only issue I can see is unbounded threads and the cost of thread
creation/destory. So at the first step, you can use threadpool.
So change to ExecutorService with fixedthreadpool is enough unless you need
to fine control of the tasks.
【在 c********l 的大作中提到】 : 目前有这么一个程序,共有如下三种线程: : 1,GUI主线程, non-daemon : 2,2个服务器线程,分别监听端口号为8000和8001的socket, non-daemon : 3,每当服务器socket.accept()时,生成一个新的daemon线程, : 然后在这些n个新生成的并发线程中处理具体业务。 : 所以,主线程,服务器线程,daemon线程,这三种线程目前是三个实现Runnable的类 : 上述设计比较过时,因为是用的非常传统的implements Runnable的教科书式方法 : 有没有更先进的,比如Future/Callable/ExecutorService? : 如果是这样,那么具体应该如何改进?
|
q*c 发帖数: 9453 | 7 message based instead of event based for large scale messages.
【在 c********l 的大作中提到】 : 目前有这么一个程序,共有如下三种线程: : 1,GUI主线程, non-daemon : 2,2个服务器线程,分别监听端口号为8000和8001的socket, non-daemon : 3,每当服务器socket.accept()时,生成一个新的daemon线程, : 然后在这些n个新生成的并发线程中处理具体业务。 : 所以,主线程,服务器线程,daemon线程,这三种线程目前是三个实现Runnable的类 : 上述设计比较过时,因为是用的非常传统的implements Runnable的教科书式方法 : 有没有更先进的,比如Future/Callable/ExecutorService? : 如果是这样,那么具体应该如何改进?
|