当前位置:首页 > 开发 > 编程语言 > 多线程 > 正文

java多线程join的作用与用法

发表于: 2013-04-02   作者:bijian1013   来源:转载   浏览:
摘要:         对于JAVA的join,JDK 是这样说的:join public final void join (long millis )throws InterruptedException Waits at most millis milliseconds for this thread to die. A timeout of 0 means t

        对于JAVA的join,JDK 是这样说的:join public final void join (long millis )throws InterruptedException Waits at most millis milliseconds for this thread to die. A timeout of 0 means to wait forever。字面意思是等待一段时间直到这个线程死亡。

        有这样一种应用场景,主线程启动几个子线程分别同时去作一些事情,主线程需等这些子线程都结束后,才能往下执行(如需要获得子线程的结果信息)

        面对这样的场景,我们有几种思路:

        1.启动子线程后,让主线程sleep一段时间

         这种方式最不靠谱,因为我们不知道要让主线程休眠多长时间

        实例1:

package com.bijian.study.thread;

public class MyThread extends Thread {

	boolean negative = true;
	double pi; // Initializes to 0.0, by default

	public void run() {
		for (int i = 3; i < 100000; i += 2) {
			
			if (negative)
				pi -= (1.0 / i);
			else
				pi += (1.0 / i);
			negative = !negative;
		}
		pi += 1.0;
		pi *= 4.0;
		System.out.println("Finished calculating PI");
	}
}

        主线程:

package com.bijian.study.thread;

public class MainThread {

	public static void main(String[] args) {
		MyThread mt = new MyThread();
		mt.start();
		try {
			Thread.sleep(10); // Sleep for 10 milliseconds
		} catch (InterruptedException e) {
		}
		System.out.println("pi = " + mt.pi);
	}
}

         运行结果:

Finished calculating PI
pi = 3.1415726535897894

 

         2.sleep一段时间不靠谱,于是还可以来个循环,判断子线程是否还活着

        实例2(修改实例1的主线程):

package com.bijian.study.thread;

public class MainThread2 {

	public static void main(String[] args) {
		MyThread mt = new MyThread();
		mt.start();
		while (mt.isAlive())
			try {
				Thread.sleep(10); // Sleep for 10 milliseconds
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		System.out.println("pi = " + mt.pi);
	}
}

         运行结果:

Finished calculating PI
pi = 3.1415726535897894

         这样,效果是达到了,但在主线程里写个循环,不是高性能的方法。

 

         3.join很好的解决此应用场景

        实例3(修改实例1的主线程):

package com.bijian.study.thread;

public class MainThread3 {
	public static void main(String[] args) {
		MyThread mt = new MyThread();
		mt.start();
		try {
			mt.join();
		} catch (InterruptedException e) {
		}
		System.out.println("pi = " + mt.pi);
	}
}

         运行结果:

Finished calculating PI
pi = 3.1415726535897894

 

        扩展下实例3,就能很好的解决主线程启动几个子线程分别同时去作一些事情,主线程需等这些子线程都结束后,才能往下执行。如下所示:

          实例4:

          1.新建一个子线程

package com.bijian.study.thread;

public class MyThread2 extends Thread {

	boolean negative = true;
	double res; // Initializes to 0.0, by default

	public void run() {
		for (int i = 1; i < 100; i += 2) {
			if (negative)
				res -= (1.0 / i);
			else
				res += (1.0 / i);
			negative = !negative;
		}
		System.out.println("Finished calculating res");
	}
}

         2.修改实例1的主线程

package com.bijian.study.thread;

public class MainThread3 {
	public static void main(String[] args) {
		
		//创建并启动子线程1
		MyThread mt = new MyThread();
		mt.start();
		
		//创建并启动子线程2
		MyThread2 mt2 = new MyThread2();
		mt2.start();
		try {
			mt.join();
			mt2.join();
		} catch (InterruptedException e) {
		}
		System.out.println("pi = " + mt.pi);
		System.out.println("res = " + mt2.res);
	}
}

         运行结果:

Finished calculating res
Finished calculating PI
pi = 3.1415726535897894
res = -0.7803986631477527

java多线程join的作用与用法

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
join是线程的一个方法,在API中,它的英文解释是Waits for this thread to die.等待此线程死亡。谁
join函数的作用,是让当前线程等待,直到调用join()的 线程结束或者等到一段时间,我们来看以下代
inner join、left join、right join中where和and的作用 1、内连接(自然连接): 只有两个表相匹配的行
inner join、left join、right join中where和and的作用 1、内连接(自然连接): 只有两个表相匹配的行
最全面的java多线程用法解析,如果你对Java的多线程机制并没有深入的研究,那么本文可以帮助你更透
join() 用法:<数组对象>.join(<分隔符>); 返回一个字符串,该字符串把数组中的各个元
感觉工作之后一直在用框架,数据库的一些基本的东西都忘记了,这次借着这个系列的博客回顾一下旧知
1、join的用法 package com.ljb.app.thread; /** * 线程调度join的使用 * @author LJB * @version 2
先引用<<Java 7 Concurrency Cookbook>>书中一段关于Fork Join的描述: This framework
SQLite是android自带的微型功能比较健全的手机数据库,他有一大辅助类SQLiteOpenHelper,当我们自己
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号