`

Java 多线程例子3 联合线程 join()

阅读更多

1,联合线程实际上就是把多线程又联合成了一个线程,但这里还是要比单线程灵活很多,比如说,我可以让一个线程到运行到某一个条件再联合其他线程。当前线程与其他线程联合在一起,又一种让出cpu,而且直到别个线程运行完,当然,这里join()还可以传入时间以控制联合的时间。

a,直接联合:

public class ThreadDemo {
	public static void main(String[] args) {
		Thread t = new TestThread();
//		t.setDaemon(true);
		t.start();
		try {
			t.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		while(true) {
			System.out.println("main(): "+Thread.currentThread().getName() + " is running");
		}
	}
}

class TestThread extends Thread {
	public void run() {
		while(true) {
			System.out.println("TestThread: "+Thread.currentThread().getName() + " is running");
		}
	}
}

 

这种直接联合,2个线程就完全成了一个线程了。

b,条件联合:

public class ThreadDemo {
	public static void main(String[] args) {
		Thread t = new TestThread();
//		t.setDaemon(true);
		t.start();
		int i=0;
		while(true) {
			System.out.println("main(): "+Thread.currentThread().getName() + " is running");
			if(i++ ==10000) {
				try {
					t.join();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

class TestThread extends Thread {
	public void run() {
		while(true) {
			System.out.println("TestThread: "+Thread.currentThread().getName() + " is running");
		}
	}
}

 这里当main线程中工作10000下后,把线程TestThread 联合进来,实际上就是main线程运行10000下后,一直等到TestThread 完成后,再运行。

这里说个题外话,在试验这种死循环的java程序时最好在命令行窗口中试验(cmd中),因为那里ctrl+c中断非常地方便,现在我都是有eclipse,在eclipse中运行时常运行死了,因为图形界面的东东,本来就需要线程去刷新图形界面去,如果程序引入了一个死循环进去,eclipse就没有能力捕捉到你所按得Terminate键了。同时,在eclipse中写的java程序,找到生成的class文件,直接运行也是一个不错的选择,但要注意不要忘了下上完整的包名。如我一开始就遇到了这个问题:ThreadDemo放在了fsf的包下面,然后到cmd切换到fsf目录下运行java ThreadDemo结果总是报错“Exception in thread "main" java.lang.NoClassDefFoundError: ThreadDemo (wrong name: fsf/ThreadDemo)”。一开始以为是classpath没有设好,结果把fsf的完整路径设到classpath中去,还是报同样错误。后来才发现,要到fsf上一层目录运行“java fsf/ThreadDemo”。

c,联合10秒和分开;

public class ThreadDemo {
	public static void main(String[] args) {
		Thread t = new TestThread();
//		t.setDaemon(true);
		t.start();
		int i=0;
		while(true) {
			System.out.println("main(): "+Thread.currentThread().getName() + " is running");
			if(i++ ==10000) {
				try {
					t.join(10000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

class TestThread extends Thread {
	public void run() {
		while(true) {
			System.out.println("TestThread: "+Thread.currentThread().getName() + " is running");
		}
	}
}

 这里当main线程运行10000下后,与TestThread 联合10秒,其实就是让TestThread 运行10秒,然后在分别运行。

分享到:
评论

相关推荐

    JAVA多线程编程详解-详细操作例子

    本压缩包,总共包含两个文档,JAVA多线程编程详解-详细操作例子和 Java多线 程编程总结 例如,runnable、thread、stop()、 suspend、yield、setPriority()、getPriority()、synchronized、wait()、join、线程池同步...

    个人总结的深入java多线程开发

    看完《think in java》多线程章节,自己写的多线程文档,还结合了其他的相关网络资料。 线程 一. 线程池 1)为什么要使用线程池 2 2)一个具有线程池的工作队列 3 3)使用线程池的风险: 4 4)有效使用线程池的原则 5...

    java线程实例

    java线程实例,运用thread线程进行学习。有更多例子可以咨询。

    Java JDK实例宝典

    7 一个支持多线程的服务器框架 13. 8 代理服务器 13. 9 Telnet客户端 13. 10 UDP编程 13. 11 聊天室服务器端 13. 12 聊天室客户端 13. 13 FTP客户端 第14章 数据库 14. 1 连接各种...

    java jdk实列宝典 光盘源代码

    一个支持多线程的服务器框架,GeneralServer.java; 代理服务器,ProxyServer.java; telnet客户端,访问系统的telnet服务实质上是与telnet服务建立socket连接,默认的telnet服务的端口是23,TelnetClient.java; ...

    疯狂JAVA讲义

    第1章 Java概述 1 1.1 Java语言的发展简史 2 1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6...

    java范例开发大全源代码

     1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置是否成功 7  实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符(教学视频:39分钟) ...

    java范例开发大全

    第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索并下载(线程等待和通报) 410 实例225 模拟淘宝...

    Java范例开发大全 (源程序)

     第13章 多线程编程(教学视频:121分钟) 405  13.1 多线程的五种基本状态 405  实例222 启动线程 405  实例223 参赛者的比赛生活(线程休眠唤醒) 407  实例224 资源搜索并下载(线程...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第一阶段05讲、采用多线程方式模拟银行排队叫号.mp4 │ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中抽取出来.mp4 │ 高并发编程第一阶段07讲、策略模式在Thread和Runnable...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段05讲、采用多线程方式模拟银行排队叫号.mp4 │ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中抽取出来.mp4 │ 高并发编程第一阶段07讲、策略模式在Thread和Runnable...

    java范例开发大全(pdf&源码)

    第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索并下载(线程等待和通报) 410 实例225 模拟淘宝...

    Java范例开发大全(全书源程序)

    第13章 多线程编程(教学视频:121分钟) 405 13.1 多线程的五种基本状态 405 实例222 启动线程 405 实例223 参赛者的比赛生活(线程休眠唤醒) 407 实例224 资源搜索并下载(线程等待和通报) 410 实例225 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    11.1 多线程的servlet模型 350 11.2 线程安全的servlet 351 11.2.1 变量的线程安全 351 11.2.2 属性的线程安全 360 11.3 singlethreadmodel接口 362 11.4 小结 363 11.5 思考题 363 第3部分 jsp篇 第12章 ...

    java-core-learning-example:关于Java核心技术学习积累的例子,是初学者及核心技术巩固的最佳实践

    Java核心系列教程,关于Java核心技术学习积累的例子,是初学者及核心技术巩固的最佳实践。 包括基础语法,OOP,字符串,集合,IO,反射,线程,网络等。未完成模块:阿里Java手册,java8,注解,fork / join,加解密...

    Java开发技术大全 电子版

    第8章Java的多线程机制266 8.1线程的概念266 8.1.1多线程的特点266 8.1.2线程的状态267 8.2Thread类268 8.2.1Thread类的构造方法268 8.2.2Thread类的常用方法268 8.3多线程程序的编写269 8.3.1利用Thread的...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    11.1 多线程的servlet模型 350 11.2 线程安全的servlet 351 11.2.1 变量的线程安全 351 11.2.2 属性的线程安全 360 11.3 singlethreadmodel接口 362 11.4 小结 363 11.5 思考题 363 第3部分 jsp篇 第12章 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    11.1 多线程的servlet模型 350 11.2 线程安全的servlet 351 11.2.1 变量的线程安全 351 11.2.2 属性的线程安全 360 11.3 singlethreadmodel接口 362 11.4 小结 363 11.5 思考题 363 第3部分 jsp篇 第12章 ...

    JAVA程序设计教程

    1.1.2 实体.................................................................................................................3 1.1.3 程序.................................................................

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    11.1 多线程的servlet模型 350 11.2 线程安全的servlet 351 11.2.1 变量的线程安全 351 11.2.2 属性的线程安全 360 11.3 singlethreadmodel接口 362 11.4 小结 363 11.5 思考题 363 第3部分 jsp篇 第12章 ...

Global site tag (gtag.js) - Google Analytics