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();
}
}
分享到:
相关推荐
多线程启动.java多线程启动.java多线程启动.java多线程启动.java
浅谈Java的多线程机制.pdf
是第一次在C#中接触Thread,自己研究了一下其中Thread.Join()这个方法,下面谈谈自己的理解。 Thread.Join()在MSDN中的解释很模糊:Blocks the calling thread until a thread terminates 有两个主要问题: ...
Java线程(上).pdf 东方标准 多线程 Java线程(上).pdf 东方标准 多线程 新东方
基于java的开发源码-超简单Java多线程填表源码.zip 基于java的开发源码-超简单Java多线程填表源码.zip 基于java的开发源码-超简单Java多线程填表源码.zip 基于java的开发源码-超简单Java多线程填表源码.zip 基于java...
本篇文章主要介绍了浅谈Java线程Thread.join方法解析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
浅谈Java多线程编程.pdf
Java 线程安全 与 锁.doc
Java线程概念与原理.pdf
深入浅出 Java 多线程.pdf
java线程同步的例子.doc java线程同步的例子.doc
CountDownLatch与thread.join()的区别
3. 如何在 Java 中实现线程? 4. 用 Runnable 还是 Thread? 5. Thread 类中的 start () 和 run () 方法有什么区别? 6. Java 中 Runnable 和 Callable 有什么不同? 7. Java 中 CyclicBarrier 和 CountDownLatch 有...
浅谈JAVA中多线程的实现
浅谈JAVA中多线程的实现.pdf
交大JAVA讲义Java线程PPT学习教案.pptx
深入浅出Java多线程.doc深入浅出Java多线程.doc深入浅出Java多线程.doc
Java线程和IO总结.pdf
Java线程[文].pdf