`
edr_
  • 浏览: 169835 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

浅谈Java线程启动与Thread.join()

    博客分类:
  • J2SE
阅读更多
java中线程的启动有两种方式:
class T extends Thread{
	String name;
	public T(String n){
		name=n;
	}
	public void run() {
		try {
			for (int i = 0; i < 2; i++) {
				System.out.println("-------"+name);
			}
		} catch (Exception e) {}
	}
}
class T1 implements Runnable{
	String name;
	public T1(String n){
		name=n;
	}
	@Override
	public void run() {
		try {
			for (int i = 0; i < 2; i++) {
				System.out.println("-------"+name);
			}
		} catch (Exception e) {}
	}
}
启动:
public class Join_Thread {
	public static void main(String[] args) {
		T j1=new T("J1");
		j1.start();
		Thread t3=new Thread(new T1("T_Runable"));
		t3.start();
		System.out.println("Thred End!!");
	}
}

java中的join方法:
public class Join_Thread {
	public static void main(String[] args) {
		T j1=new T("J1");
		j1.start();
		try {
			j1.join();
		} catch (Exception e) {}
		T j2=new T("J2");
		j2.start();
		try {
			j2.join();
		} catch (Exception e) {	}
		System.out.println("Join Thred End!!");
	}
}
join();//等待该线程终止。 
join(long millis);//等待该线程终止的时间最长为 millis 毫秒。
join(long millis,int nanos);//等待该线程终止的时间最长为 millis 毫秒 + nanos 纳秒。

当使用join(long millis)时相当于在主线程中只能等待这么多时间,超过时则继续主线程的函数流程,一直到等到线程苏醒,然后继续线程的运行。
借鉴一个网友的解释:
比如:你准备洗澡,需要准备的步骤,准备好衣服,沐浴的东西及烧水这些事情,由于烧水耗时太长,如果也放在主线程之中,就很浪费资源,所以如果我们另开线程去处理,就会达到很好效果,于是乎在准备好衣服,沐浴的东西之前就去开子线程烧水,烧水的过程中主线程准备好衣服,沐浴的东西,此时就等待水烧好,然后方可痛快的洗澡了!!
修正:
更容易理解版本:准备洗澡--烧水(15秒)--等开水(5秒)--太久了,开始准备衣服(5)--衣服准备好了--等开水--水开了,可以洗澡了
class T1 extends Thread{
	String name;
	public T1(String n){name=n;}
	public void run() {
		try {
			System.out.println(name+"-------"+"在烧水中!");
			sleep(15000);
			System.out.println(name+"-------"+"烧水烧好了!");
		} catch (Exception e) {}
	}
}
class T2 extends Thread{
	String name;
	public T2(String n){
		name=n;
	}
	public void run() {
		try {
			System.out.println(name+"-------"+"准备洗澡!");
			System.out.println(name+"-------"+":先准备开水吧!");
			T1 j2=new T1("Join1");
			j2.start();
			try {
				j2.join(5000);
				System.out.println("等开水等了5秒,实在等不及了,开始准备衣服吧!");
			} catch (Exception e) {}
			System.out.println(name+"-------"+"在准备衣服5秒钟!");
			for (int i = 0; i <5; i++) {
				System.out.println(name+"-------"+"在准备衣服中!");
				sleep(1000);
			}
			System.out.println(name+"-------"+"衣服准备好了!");
			sleep(6000);
			System.out.println(name+"-------"+"全部准备好了,可以开始洗澡了!");
		} catch (Exception e) {}
	}
}
public class Join_Thread {
	
	public static void main(String[] args) {
		T2 j2=new T2("Join2");
		j2.start();
	}
}











1
4
分享到:
评论
4 楼 edr_ 2013-07-12  
wzpwap123 写道
edr_ 写道
wzpwap123 写道
貌似join示例中j1.join()放到j2里面表达洗澡效果更好一些

不懂什么意思?可以来点详细的不?

按照这个main执行,是顺序下来的,没有显示出我烧水的同时换衣服的效果,只是烧完水在换衣服在洗澡的效果,要是把j1.join放到j2就是感觉烧水的同时我换衣服然后等水烧好洗澡

最近在考试,今天考完想了一下,你理解的很通彻啊!非常谢谢!
3 楼 wzpwap123 2013-07-11  
edr_ 写道
wzpwap123 写道
貌似join示例中j1.join()放到j2里面表达洗澡效果更好一些

不懂什么意思?可以来点详细的不?

按照这个main执行,是顺序下来的,没有显示出我烧水的同时换衣服的效果,只是烧完水在换衣服在洗澡的效果,要是把j1.join放到j2就是感觉烧水的同时我换衣服然后等水烧好洗澡
2 楼 edr_ 2013-07-10  
wzpwap123 写道
貌似join示例中j1.join()放到j2里面表达洗澡效果更好一些

不懂什么意思?可以来点详细的不?
1 楼 wzpwap123 2013-07-10  
貌似join示例中j1.join()放到j2里面表达洗澡效果更好一些

相关推荐

    关于C#中Thread.Join()的一点理解

    是第一次在C#中接触Thread,自己研究了一下其中Thread.Join()这个方法,下面谈谈自己的理解。  Thread.Join()在MSDN中的解释很模糊:Blocks the calling thread until a thread terminates  有两个主要问题: ...

    浅谈Java的多线程机制.pdf

    ### 浅谈Java的多线程机制 #### 一、引言 随着计算机技术的不断发展,编程模型变得越来越复杂和多样化。多线程编程模型作为目前计算机系统架构中的一个重要组成部分,其重要性日益凸显。特别是在X86架构的硬件成为...

    深入浅出 Java 多线程.pdf

    "深入浅出 Java 多线程.pdf" Java 多线程编程是 Java 编程语言中一个非常重要的概念,它允许程序同时执行多个任务,以提高程序的执行效率和响应速度。在本文中,我们将深入浅出Java多线程编程的世界,探索多线程...

    浅谈Java线程Thread.join方法解析

    Java线程Thread.join方法解析 Java线程中的join方法是一个非常重要的概念,它允许一个线程等待另一个线程的结束,以便进行后续的操作。在本篇文章中,我们将详细介绍Java线程Thread.join方法的解析和实现。 首先,...

    Java线程概念与原理.pdf

    本文将深入探讨Java线程的概念、原理以及如何在Java中创建和启动线程。 首先,我们需要理解操作系统中的线程和进程。线程是进程中的执行单元,每个进程都有一片独立的内存空间,而线程则共享进程的内存。在多线程...

    Java线程(Java.Thread)(中英版)

    "Java线程.pdf"和"Java Threads,3rd Edition.pdf"可能是相同内容的不同版本,提供了深入的线程理论和实践知识,包括线程安全、并发设计模式、死锁、活锁和饥饿问题。这些书籍可能会详细解析`synchronized`关键字、`...

    java 中Thread.join()的使用方法

    在Java编程语言中,`Thread.join()`方法是一个非常重要的同步工具,它允许一个线程(调用者)等待另一个线程(被调用者)执行完成。`Thread.join()`的使用能够有效地解决多线程环境中的顺序执行问题,确保线程间的...

    CountDownLatch与thread.join()的区别

    CountDownLatch与thread.join()的区别

    JVM线程状态和Thread.sleep的实现原理探究.pdf

    在探究JVM线程状态以及Thread.sleep的实现原理时,我们首先需要了解Java线程与操作系统线程之间的关系。在Java虚拟机(JVM)中,每个线程通常都是以一对一的关系映射到操作系统线程上的。然而,尽管两者在实现上是...

    浅谈Java多线程编程.pdf

    "浅谈Java多线程编程" 从标题和描述可以看出,这篇文章的主题是讨论Java多线程编程的相关知识点。 多线程编程的概念 Java语言的一个重要特点是支持多线程机制,这使得Java程序可以支持多程序并发执行,从而提高...

    浅谈JAVA中多线程的实现.zip

    在Java编程语言中,多线程是程序设计中的一个重要概念,尤其在开发高效能、响应迅速的应用时。本文将深入探讨Java中多线程的实现,帮助开发者理解如何利用这一特性来优化应用程序。 多线程是指在一个程序中同时运行...

    Java源码查看线程的运行状态.rar

    线程在Java中由`java.lang.Thread`类表示,其生命周期包括以下几种状态: 1. **新建**(New):当使用`new Thread()`创建了一个线程对象时,线程处于新建状态。 2. **可运行**(Runnable):调用`start()`方法后,...

    Java多线程编程总结.doc

    Java多线程编程还涉及到线程同步、线程通信、线程状态管理等多个复杂主题,如synchronized关键字、wait()和notify()方法、Thread.join()、Thread.sleep()、线程池等。理解并熟练掌握这些知识点对于编写高效、稳定的...

    浅谈Java线程的生命周期——北大青鸟佳音旗舰.docx

    在这个例子中,`main`方法启动了两个线程`Thread1`和`Thread2`,并使用`join()`确保两个线程都执行完毕。由于线程调度的不确定性,实际输出的"A"和"B"顺序可能会有所不同,但最终会打印出完整的"A"和"B"各两遍。 ...

    JAVA多线程共13页.pdf.zip

    通过start()方法启动线程,调用run()方法执行任务,而join()方法可以使当前线程等待该线程结束。 4. **线程控制**:Java提供了多种控制线程的方式,如sleep()使线程休眠,yield()让当前线程放弃CPU使用权,...

    Java线程(20210930172753).pdf

    1. Java线程基本概念:文档提到了java.lang.Thread类和java.lang.Runnable接口,它们是Java中处理线程的两个关键组件。Thread类本身实现了Runnable接口,表明创建线程可以继承Thread类或者实现Runnable接口。 2. ...

    Java多线程的经典资料.rar

    这份“Java多线程的经典资料.rar”压缩包包含了一份名为“Java线程.pdf”的文档,很可能是关于Java多线程的详细教程或深入解析。 在Java中,多线程主要涉及以下几个关键知识点: 1. **线程创建**:Java提供了多种...

    Java Thread Programming

    Java提供了多种线程控制方法,如start()用于启动线程,run()是线程的主要执行体,join()使当前线程等待该线程终止,sleep()使线程暂停执行一段时间,yield()让当前线程暂停,让其他线程有机会运行,synchronized...

    交大JAVA讲义Java线程PPT学习教案.pptx

    Java提供了丰富的线程控制API,如`suspend()`, `resume()`, `join()`, `sleep()`, `interrupt()`等,用于控制线程的行为和同步。 线程间的通信和同步是Java多线程编程的关键点。Java提供了`synchronized`关键字和...

Global site tag (gtag.js) - Google Analytics