Можем ли мы использовать несколько блоков синхронизации в одном методе - PullRequest
1 голос
/ 15 октября 2019

Я использую среду executor для многопоточности и имею некоторую путаницу в отношении выполнения блока синхронизации. Кто-нибудь может предложить, что если следующий код имеет проблемы с синхронизацией, и если да, как я могу улучшить это? Спасибо.

public class ProcessDemo {

    private ExecutorService executorService = Executors.newCachedThreadPool();
    @SuppressWarnings("InfiniteLoopStatement")
    public void startProcess(){

        do {
            // making connection with clients
            ThreadingDemo thread = new ThreadingDemo(clientDemo);
            executorService.execute(thread);
        } while (true);
    }
}
public class ThreadingDemo implements Runnable{

    private ClientDemo clientDemo;

    ThreadingDemo(ClientDemo clientDemo){
        this.clientDemo = clientDemo;
    }
    public void run(){
        if(someCodition){
            synchronized (ThreadingDemo.class){
                clientDemo.show();
            }
        }

        synchronized (ThreadingDemo.class){
            myMethod1();
        }
    }

    private void myMethod1() {
        clientDemo.start();
        clientDemo.show();
    }
}

public class ClientDemo {

    void start(){

    }
    void show(){

    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...