当前线程方法java

时间:2012-05-31 22:43:17

标签: java multithreading

所以我正在努力为我正在制作的游戏使用线程。我非常新主题,所以我可能听不懂。我的问题是currentThread()方法如何在java API的Thread类中工作。 API说"返回对当前正在执行的线程对象的引用。",但据我所知,多个线程同时运行。怎么可能只返回一个执行线程?

7 个答案:

答案 0 :(得分:6)

调用currentThread的代码将在其中一个线程中执行,而不是在所有线程中执行,因此它可以专门获取该线程。

答案 1 :(得分: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();
    }
}

答案 2 :(得分:4)

假设您在一张纸上印有说明清单。一个人阅读说明并执行它们。说明书是一个程序。这个人是一个主题。你可以制作很多纸质副本并将它们传递给很多人。如果说明书上写着“打自己”,你自己指的是从那篇论文中读取该指令的人。同样,Thread.currentThread()指的是执行对currentThread()的调用的线程。

答案 3 :(得分:0)

“当前正在执行的线程”表示系统调度程序为该线程提供了一些时间来执行其代码。

答案 4 :(得分:0)

在编写单线程应用程序时,你可以在你的程序上推理一系列指令,每个指令在前一个指令完成后执行(这是一个粗略的近似,但概念上编译器和处理器试图模拟它并像在这真的是发生了什么。)

当您使用多个线程时,每个线程都有自己的一系列指令。创建时的新线程将传递入口点(方法),并将继续从它们执行。每个线程在执行时独立于另一个线程(它只会在另一个线程之后执行一条指令),尽管它们共享内存,因此来自一个线程的副作用会影响另一个线程。

因此,对于某些要执行的代码,必须在一个线程的上下文中完成(当应用程序启动时,操作系统会创建一个,以Main方法开始执行)。调用函数currentThread时,它处于其中一个上下文中。

创建线程时的java运行时将在线程上下文中存储对该Thread对象的引用,currentThread将只在那里查找并返回当前线程。

答案 5 :(得分:0)

在任何给定的时间点,只有一个线程正在执行(实时),因此Thread.currentThread()返回当前正在执行的线程的详细信息。例如,Thread_name,priority,method_name。

答案 6 :(得分:-1)

多个线程没有同时运行,并且在多个线程之间存在线程切换。处理器可以一次执行一个任务,因此一次执行一个线程。所以我们得到了当前运行线程的引用。