您的位置:首页 > 其它

控制线程顺序执行

2015-08-09 16:02 393 查看
题目是:有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()方法了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: