美文网首页
停止线程,守护线程, join方法

停止线程,守护线程, join方法

作者: 发光驴子 | 来源:发表于2018-03-17 14:17 被阅读0次

停止线程

 /*
  * 
  * 停止线程
  * 线程的停止:
     1. 停止一个线程 我们一般都会通过一个变量去控制的。线程的停止,并不是直接杀死线程,而是让线程中的任务执行完毕
     2. 如果需要停止一个处于等待状态下的线程,那么我们需要通过变量配合notify方法或者interrupt()来使用。
  * 
  * */
 class Demo extends Thread{

     boolean flag=true;
     public Demo(String name){
         super(name);
     }

     public synchronized void run(){
         int i=0;
         while(flag){
             try {
                 this.wait();
             } catch (InterruptedException e) {
                 // TODO Auto-generated catch block
                 //e.printStackTrace();
                 System.out.println("接收到了异常");
             }
        
             System.out.println(Thread.currentThread().getName()+":"+i);
             i++;
         }
     }
 }

 public class Thread_08 {

     public static void main(String[] args){
         Demo d=new Demo("线程1");
         d.setPriority(10);//这是设置线程的优先级 ,线程的优先级是1-10
         d.start();//开启线程
    
         for(int i =0; i<100;i++){
             System.out.println(Thread.currentThread().getName()+":"+i);
             if(i==90){//当i=90的时候停止线程
                 //d.interrupt();  // interrupt()根本就是无法停止一个线程。
                 d.flag=false;
                 //d.interrupt();//把线程的等待状态强制清楚,被清除状态的线程会接收到一个InterruptedException
                 synchronized (d) {
                     d.notify();
                 }
             }
         }

     }

 }

守护线程

/*
 * 守护线程(后台线程):在一个进程中如果只剩下了 守护线程,那么守护线程也会死亡。(就是主线程结束后,守护线程没有完成任务也会死亡)
 * 一个线程默认的都不是守护线程
 * */

class Demo10 extends Thread{
    public Demo10(String name){
        super(name);
    }
    public void run(){
        for (int i = 0; i <1000; i++) {
            System.out.println(this.getName()+":"+i);
        }
    }

}
public class Thread_09 {
    public static void main(String[] args) {
        Demo10 d=new Demo10("后台线程");
        d.setDaemon(true);//设置线程是否为守护线程,true为守护线程,false为非守护线程
        //System.out.println(d.isDaemon());;isDaemon()查看线程是否为守护线程
        d.start();
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName());
        }
    }

}

join方法

/*
 * 线程的join方法
 * 一个线程如果执行join语句,那么就有新的线程加入,执行该语句的线程必须要让步给新加入的线程先完成任务,然后才能继续执行。
 *join(millis); 等待millis 毫秒终止线程,假如这段时间内该线程还没执行完,那么结束等待,2个线程并发执行
 * */

class Mom extends Thread{
    public Mom(String name){
    
        super(name);
    }

    public  void run(){
        System.out.println("妈妈洗菜");
        System.out.println("妈妈切菜");
        System.out.println("妈妈准备炒菜,发现没有酱油了。。");
        //叫儿子去打酱油
        Son s=new Son();
        s.start();
        try {
            s.join();//加入。 一个线程如果执行join语句,那么就有新的线程加入,执行该语句的线程必须要让步给新加入的线程先完成任务,然后才能继续执行。
            //s.join(10);
        } catch (InterruptedException e) {
        // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("妈妈继续炒菜");
    
        System.out.println("一起吃饭");
    
    }
}

class Son extends Thread{
    @Override
    public void run() {
        System.out.println("儿子下楼");
        try {
            this.sleep(1000);//睡眠1000毫秒
        } catch (InterruptedException e) {
        // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("儿子一直往前走");
        System.out.println("儿子打完酱油了");
        System.out.println("上楼,把酱油给给妈妈");
    }
}

public class Thread_10 {

    public static void main(String[] args) {
        Mom mom=new Mom("妈妈");
        mom.start();
    }


}

相关文章

  • 停止线程,守护线程, join方法

    停止线程 守护线程 join方法

  • 线程状态及其常用方法

    1、线程状态图: 2、线程常用方法sleep(),wait(),join(),yield(): 线程停止: jav...

  • java并发之守护线程

    java中有两种线程,用户线程和守护线程用户线程:主线程停止时,用户线程不会停止守护线程:主线程停止时,守护线程也...

  • 高并发编程-12-加点小菜-线程的合并join

    join方法 线程的join方法可以让一个线程等待另一个线程执行完毕后再执行。 比如主线程调用子线程的join方法...

  • 线程总结

    daemon守护线程 当主线程执行完成后,守护线程不管是否完成,立即终止。 join 当前主线程等待子线程执行完成...

  • Java线程join()

    join 方法是一个阻塞方法,用来进行线程之间的交流。线程 A 调用 线程 B 的 join 方法,则线程 A 将...

  • Java 面试题

    java多线程实现主线程等待子线程执行完问题 1、使用Thread的join()方法,join()方法会阻塞主线程...

  • 线程同步(通信)

    线程分类 普通线程:主线程创建的所有子线程都是普通线程守护线程:JVM停止时,抛弃所有守护线程,不执行finall...

  • 多线程快速入门(第一天)

    线程基础知识 join()方法作用join作用是让其他线程变为等待, t1.join();// 让其他线程...

  • 多线程-守护线程

    守护线程特点:随着调用线程的停止而销毁。 设置守护线程,setDaemon(true); public class...

网友评论

      本文标题:停止线程,守护线程, join方法

      本文链接:https://www.haomeiwen.com/subject/vbgcqftx.html