文档章节

java线程中join方法原理,以及守护线程的使用

我不是扫地僧
 我不是扫地僧
发布于 2015/08/23 22:16
字数 575
阅读 72
收藏 0

1:先讲下join方法的作用: 调用join的线程可以使得其他线程等待自己运行结束,其他线程才会继续开始运行。

2:线程分为两类,用户线程和守护线程。用户线程就是比较常见的主线程、以及我们普通的后台任务处理线程。而守护线程则是为用户线程服务,比如 Eclipse里持续检测内存的使用情况等等。当时守护线程有个重要特点就是 当用户线程运行结束,守护线程会立即结束,无论守护线程里的人物是否执行完毕。

守护线程是用过给一个普通线程设置   setDaemon(true)实现。

下边给出具体代码:

MyThread.java 普通线程,用来测试join方法

package com.company;

class MyThread extends Thread{

    public MyThread(String name)
    {
        super(name);
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + " start");
        for (int i=0; i < 50; ++i)
        {
            System.out.println(Thread.currentThread().getName() + " output #"+ i);
            try {
                sleep(500);//这里的延时是为了能使效果更明显
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println(Thread.currentThread().getName() + " end");
    }
}

 

 DaemonThread.java   守护线程类

package com.company;

/**
 * Created by renjingwei on 2015/8/23.
 */
public class DaemonThread extends Thread {

    public DaemonThread(String name) {
        super(name);
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + " start");
        for (int i = 0; i < 1000; ++i) {
            System.out.println(Thread.currentThread().getName() + " output #" + i);
            try {
                sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println(Thread.currentThread().getName() + " end");
    }
}

 

Main.java

package com.company;

public class Main {

    public static void main(String[] args) {

        System.out.println(Thread.currentThread().getName() + " get start!!!");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        /*****
        注释的几行演示 线程的join用法: 调用线程会使得其他线程等待自己完成后  其他线程才会继续执行
//        MyThread thread = new MyThread("MyThread");
//        thread.start();
//
//        try {
//            thread.join();
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
        /*********************************//



        /******************************************
        //主线程的守护线程,在主线程结束后,守护线程会立即停止
        DaemonThread daemonThread = new DaemonThread("DaemonThread");
        daemonThread.setDaemon(true);
        daemonThread.start();

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
         *****************************/



        System.out.println(Thread.currentThread().getName() + " end!!!!!");


    }


}

 

运行结果,这里列举,挺长的。简单说下

join()的使用:MyThread在主线程上调用了join,此时 主线程就会等待MyThread执行完毕才会继续执行主线程的代码。

 

守护线程的使用: DeamonThread设置为主线程的守护线程,可以从log中看出,在主线程结束后,DaemonThread立即就结束了。

 

 

 

 

© 著作权归作者所有

我不是扫地僧
粉丝 0
博文 2
码字总数 739
作品 0
南京
私信 提问
Thread源码分析-java8

1.Thread特性分析 守护线程Daemon 2种方式创建一个可执行线程 线程名字 线程ID 线程优先级 线程状态6种 浅拷贝 2. 类、方法、字段分析 实现接口和继承类 只实现了一个接口Runnable threadLo...

caoxiaohong1005
2018/05/14
0
0
进一步理解Java中的线程(下)

要想真正的理解Java并发编程,线程是无论如何都必须要彻底理解的一个重要概念。那么,在开始深入介绍之前,我们先来深入的学习一下线程。前面一个章节中已经介绍过线程的一些基本知识,包括线...

HollisChuang's Blog
2018/12/22
0
0
Java 学习(27)---(多线程 / Runnable 接口 / 调度和优先级)

多线程 1 .概念 多线程:一个应用程序有多条执行路径进程:正在执行的应用程序 线程:进程的执行单元,执行路径 单线程:一个应用程序只有一条执行路径 多线程:一个应用程序有多条执行路径 ...

姜白告
2018/08/03
0
0
Java Thread及其synchronized,wait,sleep,join,yeid,interrupt

Java SE7 API - Thread: http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#yield%28%29 参考资料:http://blog.csdn.net/lqqmisslll/article/details/54208491 一、线程的简......

YuanyuanL
2015/08/12
343
0
Java 多线程编程总结

一、认识多任务、多进程、单线程、多线程 要认识多线程就要从操作系统的原理说起。 以前古老的DOS操作系统(V 6.22)是单任务的,还没有线程的概念,系统在每次只能做一件事情。比如你在cop...

鉴客
2010/12/16
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

SDKMAN推荐一个好

是在大多数基于Unix的系统上管理多个软件开发工具包的并行版本的工具。它提供了一个方便的命令行界面(CLI)和API来安装,切换,删除和列出sdk相关信息。以下是一些特性: By Developers, fo...

hotsmile
14分钟前
2
0
什么是 HDFS

是什么? HDFS 是基于 Java 的分布式文件系统,允许您在 Hadoop 集群中的多个节点上存储大量数据。 起源: 单机容量往往无法存储大量数据,需要跨机器存储。统一管理分布在集群上的文件系统称...

Garphy
17分钟前
2
0
一起来学Java8(四)——复合Lambda

在一起来学Java8(二)——Lambda表达式中我们学习了Lambda表达式的基本用法,现在来了解下复合Lambda。 Lambda表达式的的书写离不开函数式接口,复合Lambda的意思是在使用Lambda表达式实现函...

猿敲月下码
42分钟前
9
0
debian10使用putty配置交换机console口

前言:Linux的推广普及,需要配合解决实际应用方能有成效! 最近强迫自己用linux进行实际工作,过程很痛苦,还好通过网络一一解决,感谢各位无私网友博客的帮助! 系统:debian10 桌面:xfc...

W_Lu
今天
10
0
aelf Enterprise 0.8.0 beta有奖公测,“Bug奖金计划”重磅开启

2019年9月30日,aelf Enterprise 0.8.0 beta版正式发布。aelf Enterprise 0.8.0 beta是一个完备的区块链系统, 包含完备的区块链系统、开发套件、开发文档、以及配套的基础应用和基础服务。 ...

AELF开发者社区
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部