java里面如果一个主线程中启动了多个子线程,那么我们如何保证所有子线程一定在主线程结束之前全部执行完成呢,答案就是使用子线程的join()方法,join方法可以让主线程等待子线程执行完成再结束。
1、首先注释掉代码中子线程调用join()方法的代码,如下程序例子以及运行结果:
package ioctest;import java.util.ArrayList;
/*** 测试如何让主线程等待子线程执行完成 .* @author 小柱 .**/
@SuppressWarnings({ "rawtypes", "unchecked" })
public class test {public static void main(String[] args) {// 主线程里面调用testConcurrent()方法System.out.println(testConcurrent());}/*** 测试线程 .* @return .*/public static String testConcurrent() {// 定义两个List集合,分别使用一下两个线程对该两个集合添加元素final ArrayList lis1 = new ArrayList();final ArrayList lis2 = new ArrayList();// 线程1Thread t1 = new Thread(new Runnable() {public void run() {for (int count = 0; count < 10; count++) {try {// 线程每次向集合添加元素之前都休眠一秒,让子线程执行的更慢一些,使结果更加明显Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}// 使用线程1向lis1集合添加0到9lis1.add(count);}}});// 启动线程1t1.start();// 线程2Thread t2 = new Thread(new Runnable() {public void run() {for (int count = 0; count < 10; count++) {try {// 线程每次向集合添加元素之前都休眠一秒,让子线程执行的更慢一些,使结果更加明显Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}// 使用线程1向lis1集合添加0到9lis2.add(count);}}});// 启动线程2t2.start();/*try {// 调用两子线程的join()方法,让主线程等待它俩执行完再让主线程执行t1.join();t2.join();} catch (InterruptedException e) {e.printStackTrace();}*/System.out.String() + "------" + String());// 返回两个集合的值 通过两个集合的值来判断两个线程是否在主线程之前执行完成String() + "------" + String();}}
运行结果:
[]------[]
[]------[]
2、放开注释掉的子线程调用join()方法的代码,运行结果如下:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]------[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]------[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
java程序中在主线程中如果有多个子线程,为了保证在主线程结束之前所有子线程都执行完成,那么我们需要调用每一个子线程的join()方法,这样才可以保证在主线程执行完成之前,所有子线程都执行完成。
本文发布于:2024-02-13 09:35:44,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/1715437569252284.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |