所以我正在创建一个实现矢量时钟算法的简单应用程序。该应用程序做了三件事。 它可以做一个内部事件(在我的例子中,我选择这是一个简单的代数) 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类将收到一条包含矢量时钟的消息。我的问题变成了,将这条消息带回主线程(即处理内部事件和发送事件的线程)的最佳方法是什么?我的主要线程是我有矢量时钟并在其上完成所有操作。
答案 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}}