如何从后台服务器线程获取返回值

时间:2014-01-28 18:09:15

标签: java multithreading client-server

所以我正在创建一个实现矢量时钟算法的简单应用程序。该应用程序做了三件事。 它可以做一个内部事件(在我的例子中,我选择这是一个简单的代数) 2.发送消息(通过Socket连接) 3.接收消息(通过ServerSocket)

发生任何这些事件后,您必须更新自己的本地矢量时钟。但是当您收到消息时,发送方的时钟会附加到消息的末尾,您现在必须根据接收到的时钟对您自己的本地时钟执行一些update()。

我这样做的方法是首先启动一个接受传入连接的服务器线程。然后,每个传入连接在服务器线程中创建自己的线程。我的代码是:

new Thread() {                              //This thread is the server handler that will accept new clients for communication
        public void run(){
            try{
                ServerSocket server = new ServerSocket(port);   //Created a new server for clients (other users) to connect to              
                while (true) {
                    ConnectionWorker cw = new ConnectionWorker(server.accept());    //Accept the new client
                    Thread t = new Thread(cw);                                      //Start the client thread
                    t.start();                                                      //Start the thread
                }
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }
        {
            start();
        }
    };

现在,我的ConnectionWorker类将收到一条包含矢量时钟的消息。我的问题变成了,将这条消息带回主线程(即处理内部事件和发送事件的线程)的最佳方法是什么?我的主要线程是我有矢量时钟并在其上完成所有操作。

1 个答案:

答案 0 :(得分:0)

  

我的问题变成了,将这条消息带回主线程的最佳方法是什么

您可以考虑切换为使用ExecutorService。然后,您可以提交Callable,您可以使用该// this is for 1 thread but you can also use a fixed number of threads or dynamic ExecutorService threadPool = Executors.newSingleThreadExecutor(); Future<SomeResult> future = threadPool.submit(new Callable<SomeResult>() { public SomeResult call() { // thread code goes here } }); // after you submit the last job, you can shutdown the pool threadPool.shutdown(); ... // later you can get the result SomeResult result = future.get(); 轻松地将结果返回到主线程。

{{1}}