У меня возникла ситуация, когда мне нужно вызвать метод1() в классе B из A. Когда вызывается метод1(), он создает новый Thread say (MyThread) и запускает его немедленно. В моем случае я вызываю метод1() из двух разных мест приложения. Я не хочу каждый раз создавать новый экземпляр этого потока. Внутри метода1() я попытался проверить, если myThread.isAlive() перед созданием нового экземпляра MyThread. Но я получаю ошибку компиляции. MyThread необходимо инициализировать, чтобы вызвать MyThread.isAlive(). Поэтому, если ввести свойство метода типа Thread ie.,Ссылка на тему как свойство уровня класса?
method() { { Thread myThread; if (myThread.isAlive()) {return}; .....
Это хорошая идея объявить свойство уровня класса в классеB для Mythread и инициализировать его до нуля. Затем внутри метода1() проверить статус потока, если он не запущен, создать новый?
class B()
{
Thread myThread = null;
public static B getInstance()
{
return B singleton object;
}
public void method1()
{
if(myThread.isAlive())
return;
myThread = new Thread(new Runnable(){
public void run(){
do some stuff.....
}).start();
}
==================
class A()
{
B.getInstance().method1();
}
==================
class someOtherClass()
{
B.getInstance().method1();
}
Выглядит отлично! но не могли бы вы объяснить мне немного больше с измененными фрагментами кода моего кода? – AKh
Вы можете узнать об этом самостоятельно, прочитав соответствующие учебные пособия по Java; например http://download.oracle.com/javase/tutorial/essential/concurrency/executors.html –
В начале потока не может быть никаких условий гонки, но они все еще существуют при выполнении задач, если вы не используете один исполнитель потока. –