2016-12-20 4 views
-2

поэтому я создал следующую тему:Может ли поток запускать два метода одновременно?

public class test extends thread{ 
    public void run(){ 
     // Do stuff 
    } 
    public void onPause(){ 
     //Do stuff to prepare for pausing 
    } 
} 

Теперь мой вопрос, предполагает, что этот поток в настоящий момент выполнения метода запуска() и все вдруг из основного потока я называю OnPause(), то будет что заставить его прекратить выполнение run() и выполнить метод onPause() или оба они будут выполняться одновременно?

+0

Почему вы думаете, что это не так? –

+1

'this' thread будет выполнять' run() '. «Основной» поток будет выполнять 'onPause()'. Два потока, каждый из которых выполняет отдельную последовательность инструкций. Один поток не может делать сразу две вещи, но два потока могут. – ebyrob

ответ

1

Они будут работать одновременно, потому что, как вы указали, вы вызываете из основного потока.

+0

Ох, стреляй, я размахивал своей головой, и теперь ты ее поднял, я вижу это сейчас. Я думал, что когда я вызываю onPause(), текущий поток работает, это вызов onPause() при выполнении run(). Теперь, глядя на это, я понял, что это очень глупый вопрос. – JustCurious

+0

Совсем не много, многопоточность - дело сложное. –

0

Концептуально неправильно путать объекты Thread с актуальными потоками. Поток назначается объекту Thread, так что начало вызова в потоке выполняет метод запуска Thread (или его Runnable) в этом потоке.

A Thread - это еще один объект и (если вы не сделаете что-то, чтобы ограничить доступ, например добавление блокировки), нет ничего, что останавливало бы несколько потоков от выполнения его методов. Таким образом, метод запуска Thread может вызываться одновременно; если ваш метод запуска вызывает метод Thread, например isInterrupted, это проверяет состояние объекта Thread, а не состояние потока, выполняющего этот метод. (Использование Thread.currentThread() обращается к исполняемому потоку.)

Одним из преимуществ создания привычки не продлевать Thread и вместо этого запускать Runnable или Callable является то, что есть немного меньше места для замешательства, re не наследует методы Thread.

Смежные вопросы