【问题标题】:Accessing the main thread, How it works?访问主线程,它是如何工作的?
【发布时间】:2015-09-11 10:59:30
【问题描述】:

考虑下面的代码 sn -p

public class ThreadDemo{
    public static void main(String[] args){
        Thread t = Thread.currentThread();
        t.setName("MainThread");
    }
}

我知道每个类都会自动扩展 java.lang.Object。并且此类不扩展或实现任何其他类或接口。
我的问题是因为 ThreadDemo 类不扩展或实现任何接口或类,包括 Thread 和 Runnable。
我们怎么可能在main方法中使用Thread类来访问主线程?
我的意思是它是如何工作的???是关于 JVM 的东西吗?

【问题讨论】:

  • 你的问题对我没有任何意义。您正在创建一个线程对象。创建一个对象与创建该对象的类有什么关系?您还可以创建一个列表或时间戳或任何没有 threaddemo 类实现或扩展任何接口/类的东西。
  • 错,错,错!!! #ckruczek。我不是在创建一个对象。语句'Thread.currentThread();'让您可以访问由 JVM 创建的主线程 我没有使用“新”关键字
  • 不要混淆类和当前正在执行类代码的线程。该类是任何类,执行它的线程是一个线程。将其与获得像 Color c = Color.Blue 这样的颜色进行比较 - 基本上是一样的。
  • ckruczek 的意思是你创建了一个引用。但其余的仍然有效。
  • 哈哈哈不错试试@kolahghermezi。您必须了解基本的编程概念????

标签: java multithreading


【解决方案1】:

您正在调用Thread 的静态currentThread() 方法,该方法返回当前线程(因此得名)。然后你设置它的名字。

这段代码没有什么神奇之处(除了currentThread() 是本机方法)。

【讨论】:

  • 但是我没有创建主线程,我知道 JVM 是这样做的。 JVM怎么知道我的意思是主线程而不是任何其他线程???
  • @kolahghermezi 因为你在主线程上。如果您在不同的线程上,则会返回不同的线程。
  • 因为是当前正在执行代码的线程。
  • 谢谢@Fildor 现在我明白了;-)
  • @kolahghermezi 真的没有什么好得到的。一个线程 - 无论哪个 - 正在执行您的代码。 Thread.currentThread 也在该线程上执行。所以它会自己返回,就是这样。
【解决方案2】:

JVM 怎么知道我的意思是主线程而不是任何其他线程?

“currentThread”这个名字有点用词不当。它可以追溯到大多数计算机只有一个 CPU 的时代,因此只有一个线程——当前线程——可以在任何给定时间运行。

在我的笔记本电脑上,可以有八个“当前”线程,而在大型主机上,可以有一百多个。现在Thread.currentThread() 所做的是返回调用该方法的任何线程的标识。

【讨论】:

    【解决方案3】:

    currentThread( )Thread 类的公共静态成员。它的一般形式是:

    static Thread currentThread( )
    

    此方法返回对调用它的线程的引用。

    可以在不创建类实例的情况下调用静态方法,使用类名如下:

    ClassName.staticMethod( ) 
    

    由于currentThread( ) 是一个静态成员方法,因此可以直接使用它而无需创建Thread 类的实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 2013-11-14
      相关资源
      最近更新 更多