Я хочу выполнить эти два фрагмента кода одновременно. Вот код, который я до сих пор:Выполнение двух задач одновременно в Java
@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;
}
}
Все здесь работает, но я хочу сделать следующие задачи одновременно:
TASK1: Выход caseNum1, сохранить новый случай в базу данных
Task2: выход 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;
}
}
Но случайNum1 и caseNum2 возвращают null. Любая идея почему? Возможно, run() неправильно вызван. Хотя, я даже не уверен, что я делаю эту правку. Есть идеи?
Для запуска темы на ** ** Точно то же самое время смотреть на [это] (http://stackoverflow.com/questions/3376586/how-to-start-two-threads-at-exactly- то же время) – Dan
Похоже, вы собираетесь запустить это как веб-сервис. Возможно, вы захотите пересмотреть использование переменных экземпляра, поскольку у вас может быть несколько одновременных запросов. – user1675642