由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - Java 多线程 的架构如何改进?
相关主题
有人在Java/J2EE项目中用过多线程/concurrent吗?多线程优化求助! (转载)
java update main UI from child thread issue (转载)FMP supports UI thread in both Swing and SWT
FMP vs ExecutorService/Futureserver端用Threadpool实现request/response的两种不同方法比较
java concurrency时,你们用的callable还是runnable?问题一枚
FMP 进驻 Programming 版写thread safe程序现在也是程序员必须要掌握的了吧
Java 多线程:还需要好CPU?computer的历史就是不断地做出trade off. 每秒500万也一样。
晕了,多线程,共享内存的问题scala开发效率确实奇高
单线程一般都是历史原因编程题又一道
相关话题的讨论汇总
话题: 线程话题: daemon话题: 程序话题: thread话题: so
进入Programming版参与讨论
1 (共1页)
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?
: 如果是这样,那么具体应该如何改进?

1 (共1页)
进入Programming版参与讨论
相关主题
编程题又一道FMP 进驻 Programming 版
怎么练习multi-threading,平常工作都是用Java框架Java 多线程:还需要好CPU?
Java的多线程的一般问题晕了,多线程,共享内存的问题
重新学习Java Thread的Field变量与Thread Local单线程一般都是历史原因
有人在Java/J2EE项目中用过多线程/concurrent吗?多线程优化求助! (转载)
java update main UI from child thread issue (转载)FMP supports UI thread in both Swing and SWT
FMP vs ExecutorService/Futureserver端用Threadpool实现request/response的两种不同方法比较
java concurrency时,你们用的callable还是runnable?问题一枚
相关话题的讨论汇总
话题: 线程话题: daemon话题: 程序话题: thread话题: so