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();
}
}
分享到:
相关推荐
是第一次在C#中接触Thread,自己研究了一下其中Thread.Join()这个方法,下面谈谈自己的理解。 Thread.Join()在MSDN中的解释很模糊:Blocks the calling thread until a thread terminates 有两个主要问题: ...
"浅谈Java的多线程机制" 本文主要讨论了Java语言中的多线程机制,旨在提高应用程序的性能和实时控制性能。 Java提供了多线程编程模型,使得在一个程序中可以同时执行多个小任务,从而最大限度地利用CPU资源。 首先...
"深入浅出 Java 多线程.pdf" Java 多线程编程是 Java 编程语言中一个非常重要的概念,它允许程序同时执行多个任务,以提高程序的执行效率和响应速度。在本文中,我们将深入浅出Java多线程编程的世界,探索多线程...
多线程启动.java多线程启动.java多线程启动.java多线程启动.java
Java线程Thread.join方法解析 Java线程中的join方法是一个非常重要的概念,它允许一个线程等待另一个线程的结束,以便进行后续的操作。在本篇文章中,我们将详细介绍Java线程Thread.join方法的解析和实现。 首先,...
本文将深入探讨Java线程的概念、原理以及如何在Java中创建和启动线程。 首先,我们需要理解操作系统中的线程和进程。线程是进程中的执行单元,每个进程都有一片独立的内存空间,而线程则共享进程的内存。在多线程...
"Java线程.pdf"和"Java Threads,3rd Edition.pdf"可能是相同内容的不同版本,提供了深入的线程理论和实践知识,包括线程安全、并发设计模式、死锁、活锁和饥饿问题。这些书籍可能会详细解析`synchronized`关键字、`...
在Java编程语言中,`Thread.join()`方法是一个非常重要的同步工具,它允许一个线程(调用者)等待另一个线程(被调用者)执行完成。`Thread.join()`的使用能够有效地解决多线程环境中的顺序执行问题,确保线程间的...
CountDownLatch与thread.join()的区别
在探究JVM线程状态以及Thread.sleep的实现原理时,我们首先需要了解Java线程与操作系统线程之间的关系。在Java虚拟机(JVM)中,每个线程通常都是以一对一的关系映射到操作系统线程上的。然而,尽管两者在实现上是...
"浅谈Java多线程编程" 从标题和描述可以看出,这篇文章的主题是讨论Java多线程编程的相关知识点。 多线程编程的概念 Java语言的一个重要特点是支持多线程机制,这使得Java程序可以支持多程序并发执行,从而提高...
在Java编程语言中,多线程是程序设计中的一个重要概念,尤其在开发高效能、响应迅速的应用时。本文将深入探讨Java中多线程的实现,帮助开发者理解如何利用这一特性来优化应用程序。 多线程是指在一个程序中同时运行...
线程在Java中由`java.lang.Thread`类表示,其生命周期包括以下几种状态: 1. **新建**(New):当使用`new Thread()`创建了一个线程对象时,线程处于新建状态。 2. **可运行**(Runnable):调用`start()`方法后,...
多线程编程是JAVA开发中的一个重要组成部分,通过掌握线程的创建、启动、同步等基本操作,开发者可以有效提升应用程序的性能。无论是使用传统的`synchronized`关键字还是现代的显式锁机制,都需要对线程安全有深刻...
Java多线程编程还涉及到线程同步、线程通信、线程状态管理等多个复杂主题,如synchronized关键字、wait()和notify()方法、Thread.join()、Thread.sleep()、线程池等。理解并熟练掌握这些知识点对于编写高效、稳定的...
在这个例子中,`main`方法启动了两个线程`Thread1`和`Thread2`,并使用`join()`确保两个线程都执行完毕。由于线程调度的不确定性,实际输出的"A"和"B"顺序可能会有所不同,但最终会打印出完整的"A"和"B"各两遍。 ...
通过start()方法启动线程,调用run()方法执行任务,而join()方法可以使当前线程等待该线程结束。 4. **线程控制**:Java提供了多种控制线程的方式,如sleep()使线程休眠,yield()让当前线程放弃CPU使用权,...
1. Java线程基本概念:文档提到了java.lang.Thread类和java.lang.Runnable接口,它们是Java中处理线程的两个关键组件。Thread类本身实现了Runnable接口,表明创建线程可以继承Thread类或者实现Runnable接口。 2. ...
这份“Java多线程的经典资料.rar”压缩包包含了一份名为“Java线程.pdf”的文档,很可能是关于Java多线程的详细教程或深入解析。 在Java中,多线程主要涉及以下几个关键知识点: 1. **线程创建**:Java提供了多种...