java - 为什么在多线程工作时调试不能正常工作

标签 java multithreading debugging

我有关于多线程编程的基本信息,所以我努力改进这个主题和工作 Debug模式,但它不能正常工作。

代码示例:

public class MultiThreadsExample implements Runnable {

private Thread t;
private String threadName;

//我有创建线程的构造函数

public static void main(String[] args) {
    MultiThreadsExample thread1=new MultiThreadsExample("Thread-1");
    thread1.start();
    MultiThreadsExample thread2=new MultiThreadsExample("Thread-2");
    thread2.start();

}
//runnable interface override method
@Override
public void run() {
    System.out.println("Running thread name:" + threadName);
    for (int i = 0; i < 4; i++) {
        System.out.println("Working thread: " + i + " " + threadName);
        try {
            Thread.sleep(50);
        } catch (InterruptedException ex) {
            Logger.getLogger(MultiThreadsExample.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    System.out.println("Thread " + threadName + " interrupted.");
}

public void start() {
    System.out.println("Starting " + threadName);
    if (t == null) {
        t = new Thread(this, threadName);
        t.start();
    }
}

输出:

Creating thread name:Thread-1 Starting Thread-1 Creating thread name:Thread-2 Starting Thread-2 Running thread name:Thread-1 Working thread: 0 Thread-1 Working thread: 1 Thread-1 Working thread: 2 Thread-1 Working thread: 3 Thread-1 Thread Thread-1 interrupted. Running thread name:Thread-2 Working thread: 0 Thread-2 Working thread: 1 Thread-2 Working thread: 2 Thread-2 Working thread: 3 Thread-2 Thread Thread-2 interrupted.

最佳答案

根据您的评论,我想您希望得到如下输出: 工作线程:0 Thread-1 工作线程:0 Thread-2 工作线程:1个Thread-1 工作线程:1 Thread-2 ... 线程不是这样工作的。您无法准确控制线程的执行顺序。 它取决于 JVM,并且高度依赖于您的机器和操作系统之类的东西,因为您正在调试甚至可能是您的 IDE。 据我所知,您的代码可以正常工作。

顺便说一句,这是我运行代码时的输出,因此它可以在我的机器上运行: 创建线程名称:Thread-1 启动线程 1 创建线程名称:Thread-2 启动线程2 运行线程名称:Thread-1 运行线程名称:Thread-2 工作线程:0 Thread-1 工作线程:0 Thread-2 工作线程:1个Thread-1 工作线程:1 Thread-2 工作线程:2 Thread-1 工作线程:2 Thread-2 工作线程:3 Thread-1 工作线程:3线程-2 线程 Thread-1 已中断。 线程 Thread-2 已中断。

您应该查看一些有关 java 并发的教程,例如 this one 。 他们解释了有关线程同步的一些基础知识。

关于java - 为什么在多线程工作时调试不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38844185/

相关文章:

java - 如何访问java Spring非 Controller 类中的属性文件

java - 如何从 persistence.xml 引用外部 hibernate.cfg.xml

java - JPA:DELETE WHERE 不删除子级并引发异常

C#如何取消一个正在执行的方法

winforms - 任务完成后才显示进度条

java - 在 **Intellij-idea** 中调试时如何跳过 JRE-java 代码?

java - Spring 3 SimpleMappingExceptionResolver warnLogCategory log4j

java - 最多运行 n 个 Java 线程

debugging - GDB:如何查看哪些内存地址是可访问的?

css - 导航栏调试