Java 在应用程序中实现同步和异步行为的有效方法

Java 在应用程序中实现同步和异步行为的有效方法,java,multithreading,asynchronous,thread-safety,Java,Multithreading,Asynchronous,Thread Safety,我正在从事一个项目,在这个项目中,我应该使我的客户的行为同步和异步。一般而言,我们的客户将如何工作,如下所示: 客户将使用userId调用我们的客户机,我们将从该userId构建一个URL,并对该URL进行HTTP调用,我们将在点击URL后返回一个JSON字符串。在我们将响应作为JSON字符串返回后,我们将把该JSON字符串发送回我们的客户 因此,在这种情况下,正如我上面提到的,我需要有同步和异步方法,一些客户将调用执行同步方法来获得相同的功能,而一些客户将调用我们的执行同步方法来获取数据 下面

我正在从事一个项目,在这个项目中,我应该使我的客户的行为
同步
异步
。一般而言,我们的客户将如何工作,如下所示:

客户将使用
userId
调用我们的客户机,我们将从该
userId
构建一个URL,并对该URL进行HTTP调用,我们将在点击URL后返回一个JSON字符串。在我们将响应作为JSON字符串返回后,我们将把该JSON字符串发送回我们的客户

因此,在这种情况下,正如我上面提到的,我需要有
同步
异步
方法,一些客户将调用
执行同步
方法来获得相同的功能,而一些客户将调用我们的
执行同步
方法来获取数据

下面是我的界面-

public interface Client {

    // for synchronous
    public String executeSynchronous(final String userId);

    // for asynchronous
    public Future<String> executeAsynchronous(final String userId);
}
下面是我将执行实际任务的简单类-

class Task implements Callable<String> {

    private final String userId;

    public Task(String userId) {
        this.userId = userId;   
    }

    public String call() throws Exception {

        String url = createURL(userId);

        // make a HTTP call to the URL
        RestTemplate restTemplate = new RestTemplate();
        String jsonResponse = restTemplate.getForObject(url, String.class);

        return jsonResponse;
    }

    // create a URL
    private String createURL(String userId) {
        String generateURL = somecode;

        return generateURL;
    }
}
类任务实现可调用{
私有最终字符串用户标识;
公共任务(字符串用户ID){
this.userId=userId;
}
公共字符串调用()引发异常{
字符串url=createURL(用户ID);
//对URL进行HTTP调用
RestTemplate RestTemplate=新RestTemplate();
String jsonResponse=restTemplate.getForObject(url,String.class);
返回jsonResponse;
}
//创建一个URL
私有字符串createURL(字符串用户ID){
字符串generateURL=somecode;
返回发电机;
}
}
这是解决这个问题的正确而有效的方法吗?那么异常处理呢?我在任何地方都需要其他挡块吗?如果有的话,那么一个高级代码示例将帮助我更好地理解


如果有更好的办法,请告诉我。。。我仍在学习..

我将通过以下方式实现执行同步

 public String execute(String userId){
    Task task = new Task(userID);
    return task.call();      //Task executes in the caller thread
 }
我不会使用执行框架,因为调用将在调用线程中执行。我想您的意思是在同步方法中提供一个超时机制,这样调用者就不会被阻塞。如果不是,我认为在同步方法中没有必要使用执行框架

 public String execute(String userId){
    Task task = new Task(userID);
    return task.call();      //Task executes in the caller thread
 }