Основной вопрос многопоточности Java - PullRequest
2 голосов
/ 15 марта 2010

Когда объект создается в Java, связывается ли он с потоком, который создан в Java? Потому что, когда я анонимно реализую интерфейс в одном потоке и передаю его другому потоку, все его методы запускаются в исходном потоке. Если они связаны с их потоком создания, есть ли способ создать объект, который будет выполняться в том потоке, который его вызывает?

Ответы [ 2 ]

3 голосов
/ 15 марта 2010

Если поток A создает объект:

MyClass.staticMember = new Runnable() {...};

и поток B вызывает метод для этого объекта:

MyClass.staticMember.run();

, тогда метод run() будет выполняться в потоке B .

Thread A просто продолжит выполнять любой код, который он запускает в данный момент.

1 голос
/ 15 марта 2010

Объект не привязан к потоку, в котором он был создан ... единственный способ, которым вы будете иметь методы, выполняемые в основном потоке, - это если вы вызываете их в основном потоке.

Относительно легко увидеть, какой поток вызывает метод ... просто создайте фиктивную функцию:

public threadDetect(string which)
{
    System.out.println("Executed from " + which + " thread.");
}

В основной теме вы звоните:

threadDetect("main");

Из дочерней нити вы звоните:

threadDetect("child");

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

...