将特定方法作为Java中的Thread运行

时间:2018-05-17 10:25:35

标签: java multithreading

在我的代码中,我有一个主类,它是类客户端。该课程可以有多个类读者的读者。 Reader需要连接到计算机,然后客户端必须等待来自服务器的指令,然后客户端才能运行Reader。以下是我想要做的事情:

1)有一个线程检查所有读卡器是否已连接,以及读卡器是否断开连接以尝试重新连接。

2)同时,获得活跃读者的阅读。

实现这一目标的最佳方法是什么?理想情况下,我的课程看起来像这样:

<script>
function sortTable(n) {
  var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
  table = document.getElementById("myTable");
  switching = true;
  dir = "asc";
  while (switching) {
    switching = false;
    rows = table.getElementsByTagName("TR");
    for (i = 1; i < (rows.length - 1); i++) {
      shouldSwitch = false;
      x = rows[i].getElementsByTagName("TD")[n];
      y = rows[i + 1].getElementsByTagName("TD")[n];
      if (dir == "asc") {
        if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
          shouldSwitch= true;
          break;
        }
      } else if (dir == "desc") {
        if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
          shouldSwitch = true;
          break;
        }
      }
    }
    if (shouldSwitch) {
      rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
      switching = true;
      switchcount ++;     
    } else {
      if (switchcount == 0 && dir == "asc") {
        dir = "desc";
        switching = true;
      }
    }
  }
}
</script>

然而,返回的方法read()是有问题的。我会做这样的事情,但这对我来说似乎有些混乱:

public Class Reader implements Runnable{
    private boolean isConnected;
    public void connect(){
        ....
    }
    public String read(){
        ....
        return readings;
    }
}

这种方式合适吗?或者有更合适的方法(Executor)?

编辑: 客户的布局如下:

public Class Reader implements Runnable{
    private int id;
    private boolean isConnected,isRunning;
    public String readings;

    public void run(){
        while(isRunning){
            if(!isConnected){
                connect();
            }
            else if(isRunning){
                read();
            }
        }
    }
    private void connect(){
        ....
    }
    private void read(){
        ....
        readings=...;
        // Client await()
        doneSignal[id].countDown();
        // Client reads readings here
        // When until signal from Client and sends countDown()
        readSignal[id].await();
    }
}

1 个答案:

答案 0 :(得分:1)

  

然而,返回的方法read()是有问题的。

如果您的Reader类实现了Runnable。但它不一定非得。您可以实现callable。现在你的&#34;主要&#34; Reader方法不再是run(),而是call()。只需让它返回Reader.read()方法的返回值。

更新:此外,实施可调用可以让您更改通话方法的一般行为 - 例如返回信息性退出值 - 如果您的读者断开连接,将此类事件的管理权交给您软件​​的主/编排者类。