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

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

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2013-07-10 00:12

浏览 4439

评论

4 楼

edr_

2013-07-12

wzpwap123 写道

edr_ 写道

wzpwap123 写道

貌似join示例中j1.join()放到j2里面表达洗澡效果更好一些

966903dea4bcb507358d5dcce8b912e5.gif

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

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

最近在考试,今天考完想了一下,你理解的很通彻啊!非常谢谢!

966903dea4bcb507358d5dcce8b912e5.gif

3 楼

wzpwap123

2013-07-11

edr_ 写道

wzpwap123 写道

貌似join示例中j1.join()放到j2里面表达洗澡效果更好一些

966903dea4bcb507358d5dcce8b912e5.gif

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

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

2 楼

edr_

2013-07-10

wzpwap123 写道

貌似join示例中j1.join()放到j2里面表达洗澡效果更好一些

966903dea4bcb507358d5dcce8b912e5.gif

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

1 楼

wzpwap123

2013-07-10

貌似join示例中j1.join()放到j2里面表达洗澡效果更好一些

966903dea4bcb507358d5dcce8b912e5.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值