Вопрос по multithreading, java – Текущий метод потока Java

8

Поэтому я пытаюсь работать с темами для игры, которую я создаю. яvery новичок в теме, поэтому я не могу правильно понять. Мой вопрос заключается в том, как метод currentThread () работает в классе Thread API Java. API говорит: «Возвращает ссылку на текущий выполняющийся объект потока.», Но, насколько я понимаю, несколько потоков выполняются одновременно. Как можно вернуть только один исполняющий поток?

Вы должны прочитать некоторый учебник о потоках. Simon Dorociak
Я думаю, что они должны были назвать его getSelfThread () или что-то в этом роде, потому что может быть более одного выполняющегося потока с многоядерным процессором. goat

Ваш Ответ

7   ответов
4

она выполняется в определенном потоке. Это поток, возвращаемый этим методом.

Очевидно, что если конкретный метод выполняется несколькими потоками, каждое выполнение может возвращать разные значения дляThread.currentThread().

Вы можете попробовать этот короткий пример, чтобы лучше понять, что происходит, и, в частности, тот факт, что 2 потока выполняются параллельно. Вы должны увидеть, что t1 выполнит несколько циклов, затем t2 сделает то же самое и вернется к t1 и т. Д. (Вам может потребоваться увеличить количество циклов с 5 до большего числа в зависимости от вашей машины):

public class TestThread {

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                for (int i = 0; i < 5; i++) {
                    System.out.println(Thread.currentThread());
                }
            }
        };

        Thread t1 = new Thread(r, "t1");
        Thread t2 = new Thread(r, "t2");
        t1.start();
        t2.start();
    }
}
@chris Тот же комментарий. Я, вероятно, должен был быть более откровенным об этом.
@Джеффри идея заключалась в том, чтобы показать какое-то чередование, где один поток мог бы выполнить цикл дважды, тогда как другой становится активным и т. Д.
Зачем вам нужно распечатать текущий поток в цикле? Одного раза должно хватить, я бы подумал.
Мне нравятся ваши первые 2 предложения ... но остальная часть поста, особенно код, кажется достаточно расплывчатой, чтобы вводить в заблуждение.
0

еальном времени), поэтомуThread.currentThread() возвращает информацию о текущем выполняющемся потоке. например, имя потока, приоритет, имя метода.

6

Код, который вызываетcurrentThread будет выполняться в одном из потоков, а не во всех, поэтому он может получить этот поток специально.

Спасибо, что делает это намного понятнее. user1427380
-1

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

& quot; Несколько тем не являютсяneccessarily работает одновременно ... & quot;
Многоядерные машины действительно запускают несколько потоков одновременно. Я получил массивную многопоточную программу (с высокоинтерактивными потоками), работающую на одноядерной машине, а затем переместил ее на машину с 4 ядрами. Это было настоящее образование.
4

у вас есть список инструкций, напечатанный на листе бумаги. Человек читает инструкции и выполняет их. Инструкции являются программой. Человек это нить. Вы можете сделать много копий бумаги и раздать их многим людям. Если в инструкциях написано что-то вроде: «пощечина»yourself относится к тому, кто читает эту инструкцию из этого документа. Точно так же,Thread.currentThread() относится к потоку, который выполняет этот вызовcurrentThread().

0

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

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

Таким образом, для выполнения некоторого кода это должно быть сделано в контексте одного потока (существует тот, который создается операционной системой при запуске вашего приложения и запускает его вMain метод). Когда функцияcurrentThread называется, это в одном из тех контекстов.

Среда выполнения Java при создании потока будет хранить ссылку на этоThread объект в контексте потока, аcurrentThread будет просто искать там и возвращать текущий поток.

0

Текущий поток ; означает, что системный планировщик дал этому потоку некоторое время для выполнения своего кода.

Похожие вопросы