控制线程顺序执行
2015-08-09 16:02
393 查看
题目是:有4个线程和1个公共的字符数组。线程1的功能就是向数组输出A,线程2的功能就是向字符输出B,线程3的功能就是向数组输出C,线程4的功能就是向数组输出D。要求按顺序向数组赋值ABCDABCDABCD,ABCD的个数由线程函数1的参数指定
这里就是用到了线程的join方法了。这个方法是要求线程执行完后才继续执行主线程方法。也就保障了线程的顺序开始。
在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。
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()方法了。
相关文章推荐
- 面试准备--java垃圾回收机制、内存管理
- 音乐盒录像带第二版之注册并取得ControllerEvent方法
- C++ 几种排序算法
- android jni 调用结构体示例
- RunLoop学习笔记
- NOJ2098 3_A+B(III)(大数加法)
- PowerDesigner中Name与Code同步的问题
- 二叉树之打印二叉树两节点路径
- 第23章 尝试互联网(2)
- uva10375 Choose and Divide(唯一分解定理)
- 模拟-FZU-2150-Fire Game
- util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15
- Win7 Centos7安装双系统
- C++: Vector详解
- SharePreferences——存储数据
- 共享存储函数
- HDOJ1009
- python 标准库-argparse 学习
- NOJ1032 三角形数(大数模板)
- [JLOI2013]卡牌游戏