java - Java同时运行两个任务

标签 java multithreading hibernate

我想同时执行这两段代码。这是我到目前为止的代码:

@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,将新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() 没有被正确调用。虽然,我什至不确定我是否正确执行此线程。有什么想法吗?

最佳答案

试试这个:

    ...

    CountDownLatch latch = new CountDownLatch(2);


    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);
            latch.countDown();
        }
    }).start();

    new Thread(new Runnable() {
        public void run() {
            caseNum2 = new CaseHelper(new ConfigurationService(),new CaseService()).getNextCaseNumberFromDatabase(tenantId);
            latch.countDown();

        }
    }).start();

    latch.await();

    ...

关于java - Java同时运行两个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34906220/

相关文章:

java - 安卓 : Create Service as Independent Project

sql - 分布式事务如何在线程环境中与同一个 DB 的多个连接一起工作?

java - 在 Gradle 中管理传递依赖版本

java - SimpleXML - 反序列化时如何忽略类属性

multithreading - 具有多线程的Grails服务

java - 在 Hibernate 中将给定日期时间转换为时间戳

java - 异常 : com. mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:列 'dog_id' 不能为空

java - spring+hibernate 设置不允许保存

java - 如何在 spring 3.2 mvc 中接收复杂对象?

java - 当元素已经聚焦并等待输入时如何在不在网页上找到元素的情况下使用 Sendkeys()