在调用FutureTask的run方法时,如何消除声纳qube问题?

时间:2015-11-27 07:45:06

标签: java multithreading sonarqube futuretask

我有以下代码,其中Sonar Qube引发了严重错误。

public void onMessageReceived(Message message) {

    if((message.getTargetInstanceId() != Message.ANY_TARGET) && (message.getTargetInstanceId() != this.instanceId)) {
        //Invalid message ignore
        return;
    } else {
        int randTime = ran.nextInt(2000);
        FutureTask<Message> workerTask = new FutureTask<>(new DummyCommandHandler(randTime, message,messageBus,instanceId)); 
        workerTask.run();
    }


}

以下是我遇到的问题。

Description Assignee    Resource    New issue
Thread.run() and Runnable.run() should not be called directly : Call the method Thread.start() to execute the content of the run() method in a dedicated thread.        

要在FutureTask中调用start方法,它首先没有start方法。它只有一个run方法。我怎样才能克服这个问题?有没有Java解决方案或Sonarqube解决方案?请指教。

1 个答案:

答案 0 :(得分:5)

SonarQube是对的,你不应该直接拨打futureTask.run()。请改用ExecutorService:

ExecutorService executor = Executors.newFixedThreadPool(1);
executor.execute(futureTask1);

This是关于该主题的简短而优秀的教程。