[英]Multithreaded server in java.. Threads serving files
因此,我正在编写一个多线程服务器,该服务器将输入服务器名称,端口,线程数和要请求的文件名作为输入。我的设计是通过main创建一个套接字,然后扩展一个Runnable对象(一个套接字和文件名)。我还有一个timertask,当5秒结束时将触发该任务,然后关闭并停止所有线程。.我当前的设计是在main中创建套接字,并将其传递给可运行的(其中有一个在条件x上进行while循环,一遍又一遍地请求文件),然后在任务启动时将runnable中的私有共享变量x设置为false。
我面临许多折断的管道问题,这使我相信我的设计存在缺陷。我是否缺少某些东西? 我没有使用同步/锁定变量。 我应该为每个文件请求创建一个新的套接字吗?
堆栈跟踪:
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:115)
at java.io.DataOutputStream.writeBytes(DataOutputStream.java:259)
at FR.filesRecv(Client.java:62)
at FR.run(Client.java:79)
at java.lang.Thread.run(Thread.java:637)
一些一般性的评论:
main
派生线程,然后休眠5秒钟,然后将runnable
变量设置为false。 无需计时器任务。 main
退出,也可以在每个线程上调用join()
以确保它们正确完成。 您还可以设置thread.setDaemon(false);
在线程启动之前退出,然后退出main
,直到线程自己完成,JVM才会停止。 runnable
变量,则需要确保该变量是volatile
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.