套接字流写作

时间:2010-12-07 11:29:46

标签: java multithreading serialization

语言是Java,问题是:让一些应用程序监听端口,这个应用程序是多线程的,线程保存在ThreadLocals Set中。通过打开一个套接字来传输和传输文件,我可以打开套接字并将其传递给特定的线程?应用程序已经在套接字之间传输X-interface的特定可序列化对象。

2 个答案:

答案 0 :(得分:1)

我同意彼得。但如果你退后一步,验证你的设计并确定你确实需要这个,我认为你可以按照以下方式进行。

您应该在协议中添加任何线程指示。假设您调用线程1,2,3等。因此,从客户端发送的每个命令都应包含它专用的线程ID。侦听线程应提取此值并将任务提交到特定线程。我不知道你是否可以使用自己需要的现有线程池来完成它。但不用担心:如果您的线程池很简单(即没有动态更改线程数等),那么编写自己的线程池只需10行代码:创建线程列表List<Thread>,并填充写入循环它:threads.add(new Thread())

每个线程都应该在自己的Runnable s队列中等待。当新任务到达Thread #n时,只需创建runnable并将其放入相应的队列中。

答案 1 :(得分:0)

拥有工作线程的最简单方法是使用单线程的ExecutorService(如果你愿意,可以使用池)然后你可以用

给它任务
ExecutorService executor = Executors.newSingleThreadExecutor();

executor.execute(new Runnable() { ... });

executor.shutdown();

不确定为什么要将Threads保留在ThreadLocal变量中。也许现在是时候从你的设计中退后一步,问问自己是否可以用更简单的方式做到这一点。