java 线程同步 join_JAVA同步之守护线程和JOIN方法

守护线程

守护线程是辅助线程,比如A线程中启动了线程B,并把B设置成守护,则A为主线程,如果主线程结束,守护它的线程不论做什么都会结束。public class DaemonSample {

public static void main(String[] args) throws Exception{

DaemonThread t = new DaemonThread();

t.setDaemon(true);//this is set t thread as a daemon thread.

t.start();

Thread.sleep(2000);

System.out.println("main thread exit.");

}

}

class DaemonThread extends Thread {

@Override

public void run() {

for(int i = 0; i < 10; i++) {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("i=" + i);

}

}

}

这个例子的结果是main主线程睡两秒之后说再见,而子线程则是在这两秒内计计数然后跟着一起说再见。当然它很不情愿,因为它想计10秒,但是没机会。把t.setDaemonThread(true)注释掉你会看到主线程说再见了,但是子线程快快乐乐的计完数说再见。这就是守护线程的作用,一切以非守护线程为主!

join方法

在简单的多线程编程中,常常使用join方法来控制线程的执行顺序,也仅仅是一小部分的作用。它的内部实现是wait(0)直至被调用线程执行完毕,调用线程才被唤醒。public class JoinSample {

public static void main(String[] args) throws Exception{

Thread t = new Thread(new SubThread());

t.start();

t.join();

System.out.println("The end of main thread...");

}

}

class SubThread implements Runnable {

public void run() {

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("The end of sub thread...");

}

}

在这个例子中,被调用join()的线程是t,而调用线程则是main所以会先打印下面的那句再打印上面的,即使t要先睡两秒,main也得等着。把t.join()注释掉,main就可以扬眉吐气了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值