我有关于多线程编程的基本信息,所以我努力改进这个主题和工作 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/