@artshelom

Как сделать по порядку доступ к методу?

public class SeleniumBufferead implements Runnable {
    private void send() throws Exception{
//Тут ещё другой код коонечно
       sendMessages.send("каккие-то числа", "Сообщение");
 Thread.sleep(1000000);
    }

    @Override
    public void run() {
        try {
            this.send();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


И есть обращение к этому классу. Типо new Thread(new SeleniumBufferead ()).start()

Как сделать, если одновременно из нескольких потоков обращаются к этому методу, то появляется очередь. Пока один поток не закончит, другой не начнет с ним работать

Через synchronized??
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
synchronized-метод синхронизируется на this. Не подойдёт. Например, можно передать всюду объект, на котором надо синхронизироваться.
public class SeleniumBufferead implements Runnable {
    private final Object lock;
    public SeleniumBufferead(Object lock) {
        this.lock = lock;
    }
    private void send() {
        synchronized(lock) {
             //code
        }
    }
}
.....
final Object lock = new Object();
new Thread(new SeleniumBufferead(lock)).start();
new Thread(new SeleniumBufferead(lock)).start();

А вообще советую почитать concurrency in practice.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы