所以我正在努力为我正在制作的游戏使用线程。我非常新主题,所以我可能听不懂。我的问题是currentThread()方法如何在java API的Thread类中工作。 API说"返回对当前正在执行的线程对象的引用。",但据我所知,多个线程同时运行。怎么可能只返回一个执行线程?
答案 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)
多个线程没有同时运行,并且在多个线程之间存在线程切换。处理器可以一次执行一个任务,因此一次执行一个线程。所以我们得到了当前运行线程的引用。