Thread [main,5,main]和Thread [Thread-77416,5,main]之间有什么区别?

时间:2018-01-06 15:41:16

标签: java android multithreading

我创建了一个工作线程,

Thread thread= new Thread(runnable);
thread.start();

我在工作线程中打印它;

    Log.d("SessionThread", Thread.currentThread().toString());

我得到以下输出;

  

主题[线程77416,5,主]

当我在我的活动主线程上尝试Thread.currentThread()时。它打印如下。

  

主题[主要的,如图5所示,主]

现在我无法理解工作线程日志消息中第3个参数为main的原因。

我需要了解这些论点意味着什么,我用Google搜索了但无法找到有关Thread.currentThread()

参数的任何帮助

3 个答案:

答案 0 :(得分:2)

Thread#toString()返回"该线程的字符串表示形式,包括线程的名称,优先级和线程组"。

所以第一部分是线程的名称。该名称可以在创建时传递给Thread(String)构造函数,也可以通过setName()进行配置。如果未分配名称,则使用表单"Thread-" + n的默认值。最初的帖子显然被称为"main",虽然我不确定这是标准化的。

第二部分是优先级,通过setPriority()配置。

第三部分是线程组。这是通过Thread(ThreadGroup, ...)构造函数设置的。如果未在创建线程时指定,则使用SecurityManager.getThreadGroup()的值,该值默认为当前线程的线程组。这意味着,默认情况下,main线程创建的任何线程也将与main线程位于同一线程组中。

答案 1 :(得分:2)

Thread [Thread-77416,5,main] = " Thread [" + getName()+"," + getPriority()+"," +                            group.getName()+"]&#34 ;;

Thread-77416 线程的名称,如果没有设置系统将分配一个,程序员可以通过使用setName()或在创建线程示例的新实例时设置它

 Thread t = new Thread(this, "This is Thread Name");

5是优先级表示NORM_PRIORITY优先级,这是默认优先级。线程具有以下优先级范围

    /**
     * The minimum priority that a thread can have.
     */
    public final static int MIN_PRIORITY = 1;

   /**
     * The default priority that is assigned to a thread.
     */
    public final static int NORM_PRIORITY = 5;

    /**
     * The maximum priority that a thread can have.
     */
    public final static int MAX_PRIORITY = 10;
此线程所属的

主要均值线程组名称

示例代码

public class ThreadExample implements Runnable {

   ThreadExample() {
      // main thread
      Thread currThread = Thread.currentThread();

      // thread created
      Thread t = new Thread(this, "This is Thread Name");

      System.out.println("Main thread = " + currThread);
      System.out.println("Thread created = " + t);

      // this will call run() function
      t.start();
   }

   public void run() {
   }

   public static void main(String args[]) {
      new ThreadExample();
   }
} 

<强>输出

主线程=线程[main,5,main]

Thread created = Thread [This is Thread Name,5,main]

答案 2 :(得分:1)

第三个参数是组名。如果你不提供Thread组,那么Thread组将从创建你的子线程的父线程中获取。在你的情况下它是main方法。

线程toString()方法。

public String toString() {
       ThreadGroup group = getThreadGroup();
       if (group != null) {
           return "Thread[" + getName() + "," + getPriority() + "," +
                          group.getName() + "]";
       } else {
           return "Thread[" + getName() + "," + getPriority() + "," +
                            "" + "]";
        }
    }