43. 守护线程 和 join方法

1.守护线程(后台线程):
            我们在使用一款软件的时候,有的软件会让我们在不知道的情况下下载一些东西,那么这个就是后台线程。
            一般用于提高软件的下载量(也就是赚取一些广告费)
            
            setDaemon(boolean b)    设置是否为守护线程
            isDaemon()          返回是否为守护线程(是true否false)
注意:当程序停止运行的时候,守护线程也必须停止

下面我们来模拟使用qq,然后后台下载一款软件

public class Demo11 implements Runnable{
    @Override
    public void run() {
        for (int i = 1; i <= 100; i++) {
            System.out.println("目前下载"+i+"%");
        }
    }
    public static void main(String[] args) {

        Demo11 d = new Demo11();
        Thread thread = new Thread(d);
        thread.setDaemon(true);//设置为守护线程
        thread.start();
        //当i为100时qq程序停止
        for (int i = 0; i < 100; i++) {
            System.out.println("使用qq中"+i);

        }
    }
}

2.join 加入:

    当在一个线程任务体(run)中使用此方法时,必须要等调用join方法的线程执行完成任务后,这个任务体才能继续执行

代码实例: 

class Thread2 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }
}

public class Demo12 implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if(i==30) {
                Thread2 t = new Thread2();
                Thread thread = new Thread(t,"加入的线程");
                thread.start();
                try {
                    thread.join();//加入一个线程
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }

    public static void main(String[] args) {
        Demo12 d = new Demo12();
        Thread thread = new Thread(d,"被加入的线程");
        thread.start();
    }
}

原文地址:https://www.cnblogs.com/zjdbk/p/8971407.html

时间: 2024-11-09 09:47:18

43. 守护线程 和 join方法的相关文章

多线程(守护线程、join方法、线程优先级、线程组)

setDaemon(boolean on): 守护线程(后台线程),若前台(显示)线程都结束了则后台线程自动结束. 使用setDaemon(boolean on)方法,必须在开启线程前将线程标记为守护线程. 示例: class setDaemon implements Runnable { public void run() { while (true) { System.out.println(Thread.currentThread().getName()+"...run"); }

多线程---其他方法 停止线程、守护线程、join方法

第三方停止线程: 原来是stop(),因为该方法有些问题,所以被interrupt()方法取代,它的用途跟机制是 当没有指定的方式让冻结的线程恢复到运行状态时,这时需要对冻结进行清除,强制让线程恢复到运行状态中来,这样就可以让操作标记来结束线程. Thread类提供了interrupt()方法. 守护线程: 线程对象.setDaemon():该方法表示,前台线程(主线程) 一结束,后台线程(后台运行线程)立即结束. Join方法: 等待该线程终止.就是说在主线程运行时候,读到了该线程的开始阶段,

线程的join方法

线程的join方法 from threading import Thread import time def task(): print('子线程 start') time.sleep(2) print('子进程 end') t=Thread(target=task) t.start() t.join() print('主进程') from threading import Thread import time def task(name,n): print(f'{name} start') t

Java:多线程&lt;四&gt; Lock、停止线程、守护线程、join、优先级&amp;yield

Java1.5以后,Condition将Object监视器方法(wait, notify, notifyAll)分解成截然不同的对象,以便通过这些对象与任意Lock实现组合使用为每个对像提供多个等待set(wait-set).期中,Lock替代了synchronized方法和语句的使用,Condition替代了Objetc监视器方法和使用. 当线程处于冻结状态,就有可能线程就不会结束,interrupt用于清除线程的冻结状态.当没有指定的方式让冻结状态的线程恢复到运行状态时,这是需要对冻结状态进

005 线程的join方法

一 .概述 join()方法可以让一个线程等待另外一个线程运行结束,同时join()方法具有可打断性,也就是说,在一定的时间点,线程可以不再等待继续执行. 下面我们首先看一下这个例子. public static void main(String[] args) throws InterruptedException { Thread t = new Thread(()->{ IntStream.rangeClosed(1, 100). forEach((e)-> { System.out.p

最简单的多线程并发与守护线程与join的运用

import threading import time def run(n): print("talk",n) time.sleep(3) #run("t1") #run("t2") t1=threading.Thread(target=run,args=("t1",)) t2=threading.Thread(target=run,args=("t2",)) #t1.start() #t2.start(

Python之路(第四十二篇)线程相关的其他方法、join()、Thread类的start()和run()方法的区别、守护线程

一.线程相关的其他方法 Thread实例对象的方法 # isAlive(): 返回线程是否活动的. # getName(): 返回线程名. # setName(): 设置线程名. ? threading模块提供的一些方法: # threading.currentThread(): 返回当前的线程对象. # threading.enumerate(): 返回一个包含正在运行的线程的list.正在运行指线程启动后.结束前,不包括启动前和终止后的线程. # threading.activeCount(

join和 Daemon守护线程

一.前言 一个程序至少有一个主线程,主线程启动子线程后,它们之间并没有隶属关系.主线程和子线程执行是并行的,相互独立.主线程执行完毕后默认不等子线程执行结束就接着往下走了,如果有其他程序就会运行另外的程序,如果没有就等待子线程执行完成后结束程序. import threading import time import random class MyThread(threading.Thread): def __init__(self, n): super(MyThread, self).__in

线程的使用方法start run sleep join

今天回顾了Java的线程的一些知识 例1:下面代码存有详细的解释 主要是继承Thread类与实现Runnable接口 以及start()和run()方法 package com.date0607; /** * 在一个程序中同时运行的多个独立流程,每一个独立流程就是一个线程. * 线程开发两种方式:继承Thread类与实现Runnable接口. * start() 执行是无序的,不固定的.run() 执行有先后顺序. * 继承Thread是面向对象的编程方式. * 实现Runnable接口解决了单