【发布时间】:2016-04-26 15:55:30
【问题描述】:
我想同时执行这两段代码。这是我到目前为止的代码:
@Path("/cases")
public class CaseResource {
@GET
@Path("/getCaseNumber")
@Produces(MediaType.TEXT_PLAIN)
public String getNextCaseNumber(
@ApiParam(value = "tenant id", required = true)
@HeaderParam("tenant_id") String tenantId) throws Exception {
//Piece #1
String caseNum1 = new CaseHelper(new ConfigurationService(),new CaseService()).getNextCaseNumberFromDatabase(tenantId);
Case tempCase = new Case();
tempCase.setCaseStatusCode(new CodeService().getCodeForKeyGroup("ACTIVE","CASE_STATUS"));
caseService.saveCase(tempCase, tenantId);
//Piece #2
String caseNum2= new CaseHelper(new ConfigurationService(),new CaseService()).getNextCaseNumberFromDatabase(tenantId);
String caseNumbers = "{case1: " + caseNum1 + ", case2:" + caseNum2 + "}";
return caseNumbers;
}
}
这里一切正常,但我想同时执行以下任务:
任务1:输出caseNum1,保存新case到数据库
任务2:输出caseNum2
这是我尝试做的:
@Path("/cases")
public class CaseResource {
String caseNum1;
String caseNum2;
@GET
@Path("/getCaseNumber")
@Produces(MediaType.TEXT_PLAIN)
public String getNextCaseNumber(
@ApiParam(value = "tenant id", required = true)
@HeaderParam("tenant_id") final String tenantId) throws Exception {
new Thread(new Runnable() {
public void run() {
caseNum1= new CaseHelper(new ConfigurationService(),new CaseService()).getNextCaseNumberFromDatabase(tenantId);
Case tempCase = new Case();
tempCase.setCaseStatusCode(new CodeService().getCodeForKeyGroup("ACTIVE","CASE_STATUS"));
caseService.saveCase(tempCase, tenantId);
}
}).start();
new Thread(new Runnable() {
public void run() {
caseNum2 = new CaseHelper(new ConfigurationService(),new CaseService()).getNextCaseNumberFromDatabase(tenantId);
}
}).start();
String caseNumbers = "{case1: " + caseNum1 + ", case2:" + caseNum2 + "}" ;
return caseNumbers;
}
}
但是 caseNum1 和 caseNum2 返回 null。知道为什么吗?也许 run() 没有被正确调用。虽然,我什至不确定我是否正确地执行此线程。有什么想法吗?
【问题讨论】:
-
要在完全同时启动线程,请查看this
-
看起来您要将其作为 Web 服务运行。您可能需要重新考虑使用实例变量,因为您可能有多个并发请求
标签: java multithreading hibernate