题目是:有4个线程和1个公共的字符数组。线程1的功能就是向数组输出A,线程2的功能就是向字符输出B,线程3的功能就是向数组输出C,线程4的功能就是向数组输出D。要求按顺序向数组赋值ABCDABCDABCD,ABCD的个数由线程函数1的参数指定
package com.test;
import java.util.Scanner;
public class ThreadTest {
static String[] s;
public static void main(String[] args) throws InterruptedException {
int N = 0;
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
ThreadTest tt=new ThreadTest();
tt.s=new String[4*N];
for(int i=0;i<N;i++){
Thread t1=new Thread(new Runn("A",s,4*i));
Thread t2=new Thread(new Runn("B",s,4*i+1));
Thread t3=new Thread(new Runn("C",s,4*i+2));
Thread t4=new Thread(new Runn("D",s,4*i+3));
t1.start();
t1.join();
t2.start();
t2.join();
t3.start();
t3.join();
t4.start();
t4.join();
}
for(int i=0;i<s.length;i++)
System.out.print(s[i]);
}
}
class Runn implements Runnable{
private String name;
private String temp[];
private int i;
Runn(String s,String[] t,int n){
this.name=s;
temp=t;
i=n;
}
@Override
public void run() {
temp[i]=this.name;
}
}
这里就是用到了线程的join方法了。这个方法是要求线程执行完后才继续执行主线程方法。也就保障了线程的顺序开始。
为什么要用join()方法
在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。