【问题标题】:Is it advisable to call my method in a Thread object while it executes another method?在执行另一个方法时在 Thread 对象中调用我的方法是否可取?
【发布时间】:2013-11-17 17:04:25
【问题描述】:

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

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

代码示例:

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

【问题讨论】:

  • 你给我们看会更容易。
  • 你的意思是A方法调用B方法吗?或者你的意思是一个完全不同的线程调用方法 B(在这种情况下它将在调用它的线程上运行)?
  • 没有。方法 B 被不同的线程调用。

标签: java multithreading sockets


【解决方案1】:

对我来说,在一个线程类中拥有一个被设计为由其他线程调用的方法似乎非常令人困惑。为了保持你的代码干净和易于理解,不要这样做。任何要由多个线程共享的方法都应该位于与Thread 类本身不同的类中。

【讨论】:

  • ..除非,比如说,该方法是线程间通信调用,即。它接受一个对象并将其推送到线程正在等待的私有队列中。这实际上会减少混淆并改善封装。
【解决方案2】:

嗯,是的,也不是。与线程一样,这一切都与数据有关,因为代码始终是线程安全的(除非自我修改 - 呃!)。在您的情况下,意图似乎是通过从另一个线程关闭其套接字来关闭客户端处理程序线程,我会说这很好。例如,通过将传递的对象推送到线程正在等待的私有生产者-消费者队列中,将传递的对象排队到线程的方法也是如此。

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

如果是我,我不会为同步的 null-set-check 而烦恼,而只是吞下“无效句柄”错误/异常,这是由于两个线程试图关闭同一个套接字的奇怪情况而导致的。同一时间”,但那只是我:)

一般来说,就是看方法,做了什么,接触了哪些数据,然后再做决定。很难在软件中提出一成不变的规则,因为它们经常出现应该被打破以改进功能、封装、易于调试等的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多