我正在开发一个游戏,需要使用线程。由于对这个主题非常陌生,因此可能理解不正确。我的问题是java API中Thread类中的currentThread()方法如何工作。API说“返回对当前执行线程对象的引用”,但据我所知,多个线程同时运行。如何可能仅返回一个正在执行的线程?
我正在开发一个游戏,需要使用线程。由于对这个主题非常陌生,因此可能理解不正确。我的问题是java API中Thread类中的currentThread()方法如何工作。API说“返回对当前执行线程对象的引用”,但据我所知,多个线程同时运行。如何可能仅返回一个正在执行的线程?
调用currentThread
的代码将在其中一个线程中执行,而不是所有线程中执行,因此它可以获取该特定线程。
Thread.currentThread()
指的是正在执行该调用currentThread()
的线程。Thread.currentThread()
返回不同的值。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();
}
}
Thread.currentThread()
返回当前正在执行的线程的详细信息,例如线程名称、优先级和方法名。当前正在执行的线程
" 意味着系统调度程序给了这个线程一些时间来执行其代码。当编写单线程应用程序时,您可以将程序视为一系列指令,每个指令在前一个指令完成后执行(这是一个粗略的近似,但在概念上,编译器和处理器试图模拟并像真正发生的那样工作)。
当使用多个线程时,每个线程都有自己的指令序列。创建新线程时会传递一个入口点(方法),并将从该点继续执行。每个线程在执行中独立于其他线程(它只会简单地一个接一个地执行指令),尽管它们共享内存,因此一个线程的副作用可能会影响另一个线程。
因此,要执行某些代码,必须在一个线程的上下文中执行(在应用程序启动时操作系统会创建一个线程,在Main
方法处开始执行)。调用currentThread
函数时,它就在其中一个上下文中。
Java运行时在创建线程时将在线程上下文中存储对该Thread
对象的引用,而currentThread
只需查找并返回当前线程。
多个线程不会同时运行,而是在多个线程之间进行线程切换。处理器一次只能执行一个任务,因此一次只能执行一个线程。因此,我们可以获得当前正在运行的线程的引用。