是否可以在执行另一个方法时在Thread对象中调用我的方法?

时间:2013-11-17 17:04:25

标签: java multithreading sockets

一个线程由两个方法组成,即方法A(总是监听套接字并从中读取数据)方法B(关闭套接字连接)。 方法B是同步方法。在线程执行方法A时调用方法B是一种很好的编程方式吗?

主程序启动一个线程(包含方法A和方法B)。一旦线程变为活动状态,它就会重复调用方法A(在while()循环中)。当满足某些条件时,主程序调用方法B.请看下面的代码示例。

代码示例: This is my main program which starts a thread namely client inside connect method

This is the run method of the client thread which calls a method receiveMessage() which tries to read from socket stream

当线程尝试从套接字读取时,如果用户给出disconnect命令,则主程序应该能够调用客户端线程的closeConnection方法。

2 个答案:

答案 0 :(得分:2)

对我来说,在一个线程类中设置一个方法似乎非常混乱,该方法被设计为由其他线程调用。为了保持代码清洁和易于理解,请不要这样做。多个线程共享的任何方法都应该与Thread类本身分开。

答案 1 :(得分:1)

嗯,是的,不是。因为它与线程一样,所以关于数据,因为代码总是线程安全的(除非自我修改 - 呃!)。在你的情况下,意图似乎是通过从另一个线程关闭其套接字来关闭客户端处理程序线程,我会说它没关系。与一个方法相同,该方法通过将传递的对象推送到线程正在等待的私有生产者 - 消费者队列来将其传递给该线程。

此类方法特定于该线程,在线程外部不使用任何数据,并且将它们封装在线程(或线程子系统)类中是有意义的。

如果是我,我不会对同步的空集检查感到烦恼,只是吞下了“无效句柄”错误/异常,当两个线程试图关闭同一个套接字时,这些异常会导致同时',但那只是我:)。

一般来说,只需看一下方法,它做什么,接触什么数据,然后做出决定。很难在软件中提出严格的规则,因为它们常常会出现破坏它们以改进功能,封装,易于调试等的情况。