Вопрос

Извините за еще один расплывчатый пример... но у меня есть один класс, в котором я запускаю новый экземпляр потока.Однако, если я добавляю новый экземпляр потока, он прерывает (уничтожает?) первый.

Но если я запущу два экземпляра класса (отдельно, после того как превращу их в jar-файлы), где каждый экземпляр открывает только один поток, они оба будут работать одновременно и нормально.

Я убежден, что ошибка заключается в том, как я реализую многопоточность.

Есть какие-нибудь предложения, что искать?Спасибо!Извините за расплывчатый пример.

Это было полезно?

Решение

Вы не можете предполагать, что произвольный класс является потокобезопасным.

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

Вам необходимо изучить класс и выяснить, какие методы (если таковые имеются) являются потокобезопасными.Возможно, класс InstanceOfClassIDontControl имеет статические переменные, которые путаются при многопоточном доступе.Если вы не только не контролируете класс, но даже не видите его исходный код, вам понадобится поддержка владельцев.

Другие советы

Хорошо, вот пример:

public class driver {

    public static void main(String args[])
    {
        Thread x;
        Thread y;

        x = new Thread(new pow());
        y = new Thread(new pow());

        x.start();
        y.start();  
    }
}

public class pow extends Thread {

    public void run() {
        InstanceOfClassIDontControl a = new InstanceOfClassIDontControl();
                a.doVariousProcesses();
    }
}

В этом примере я (очевидно) не контролирую класс, экземпляр которого создается и вызывается в потоке.Каждый поток может работать в течение нескольких минут.Но всякий раз, когда запускается параллельный поток (в данном случае с помощью y.start()), он уничтожает действия объекта, вызванного в экземпляре run() функции x.start().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top