java - 一旦子线程完成执行,它会继续执行主线程行吗?
问题描述
我正在尝试在主线程中创建一个子线程,如下所示,
public class test {
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("In normal child thread " + Thread.currentThread().getName());
}
});
t1.start();
System.out.println("main thread sleeping for 5 seconds : " + Thread.currentThread().getName());
Thread.sleep(5000);
System.out.println("In main thread : " + Thread.currentThread().getName());
System.out.println("exiting main thread : " + Thread.currentThread().getName());
}
}
在上面的例子中,我让主线程休眠了 5 秒。因此,一旦子线程完成打印其 sysout 语句,我预计下面的行将被执行两次,
System.out.println("In main thread : " + Thread.currentThread().getName());
System.out.println("exiting main thread : " + Thread.currentThread().getName());
但是当我执行程序时,我只看到这些行执行一次。
如果我的期望是正确的,请更新我?. 我期望主线程应该两次执行这些 sysout 语句。
解决方案
这里我们运行两个线程:MainThread 和 Child 线程。当我们为子thread()调用start()方法时,run()方法中的逻辑就会被执行。该子线程将在其 run 方法执行时终止。主线程继续执行剩余的代码。
推荐阅读
- c++ - 来自 main() 函数的意外返回值
- linux - caps2esc 停止使用 systemd 问题
- android - 当应用程序处于后台或被杀死时,FCM onMessageReceived() 未被调用
- .net - 连接字符串中缺少必需的空白错误是什么?
- java - 我使用递归按字母顺序获取第一个字符串的 java 代码给出了不正确的输出。我需要添加辅助方法吗?
- mysql - Discord.js 中的节点 mysql 返回空结果/数组
- sql - 具有多个(相同ID不同日期和不同图像)的SQL服务器查询(按最后日期过滤)
- kotlin - XMLPullParser 只返回一个元素
- multithreading - 为什么 Rust 会阻止多个可变引用?
- linux - 绕过 Xserver 显示管理