java - 如何获取线程的id?

标签 java

你能帮我理解为什么这个项目总是显示 Id 9 吗?我的意思是输出是这样的:

FirstThread.txt
Id 9
<Some string read from the file>
...
...
SecondThread.txt
Id 9
<Some string read from the file>

我估计 Id 会有所不同。即使我停止项目并再次运行,这个 Id 也不会改变。

package parallelprogramming;

import java.lang.Thread;
import java.io.*;

public class Thrd extends Thread {

    public boolean readFile(String File)/* throws FileNotFoundException */ {
        try {
            FileReader fr = new FileReader(File);
            BufferedReader br = new BufferedReader(fr);
            String s;
            try {
                while ((s = br.readLine()) != null) {
                    System.out.println(File);
                    System.out.println("Id " + this.getId());
                    System.out.println(s);
                }
                fr.close();
                return true;
            } catch (IOException IOE) {
                System.out.println("IOException caught!");
                return false;
            }
        } catch (FileNotFoundException FNFD) {
            System.out.println("File not found!");
            return false;
        }

    }
}



package parallelprogramming;

import java.awt.event.*;

import java.io.FileNotFoundException;

public class ParallelProgramming {

    public static void main(String[] args) {

        Thrd FirstThread = new Thrd();
        Thrd SecondThread = new Thrd();

        Thrd CurrentThread = null;
        String File = null;
        for (int i = 0; i < 1000000; i++) {
            if (i % 2 == 0) {
                File = "FirstThread.txt";
                CurrentThread = FirstThread;
            } else {
                File = "SecondThread.txt";
                CurrentThread = FirstThread;
            }
            while (!CurrentThread.isInterrupted()) {

                if (CurrentThread.readFile(File)) {

                    break;
                };
            }
        }

    }
}

最佳答案

您的代码使用单个线程:主线程。要开始一个线程,您需要

  • 扩展线程
  • 覆盖其run()方法
  • 实例化您的 Thread 子类
  • 调用它的start()方法

或者你需要

  • 创建一个Runnable
  • 将它传递给线程构造函数
  • 调用线程的start()方法

这在 the tutorial 中有清楚的解释。 .

扩展线程,在扩展类中添加一个方法(如readFile())并调用它,不会在另一个线程中调用该方法。

旁注:请遵守 Java 命名约定。方法和变量以小写字母开头。

关于java - 如何获取线程的id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22434479/

相关文章:

java - 为什么 Maven 在测试结束时卡住了?

java - 按下按钮没有反应

java - 包P1和P2有依赖循环,但是P1的类没有使用P2(通过jdepend分析)

java - 无法将 MP3 文件移动到其他文件夹

java - Mockito/GWT : mocked view's widgets are null

java - 以特定模式读取 csv 文件并存储在 map 或二维数组中

java - 如何编写代码来帮助垃圾收集器

Java:抛出异常可以抛出异常吗?

java - AssertJ:断言列表是否按倒序或降序排序

java - 从 unix 时间戳获取 GMT 日期