栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA——多线程【线程终止、中断、插队】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA——多线程【线程终止、中断、插队】

目录

一、线程终止

基本说明

应用案例

二、线程中断

三、线程插队 

应用案例

线程常用方法


一、线程终止
  • 基本说明

  1. 当线程完成任务后,会自动退出
  2. 还可以通过使用变量来控制run方法退出的方式停止线程,即通知方式
  • 应用案例

public class ThreadExit_ {
    public static void main(String[] args) throws InterruptedException {
        T t1 = new T();
        t1.start();

        //如果希望main线程去控制t1线程得终止,必须修改loop
        //让t1退出run方法,从而终止t1线程

        //让主线程休眠5秒,再通知t1线程终止
        Thread.sleep(5*1000);
        t1.setLoop(false);
    }
}

class T extends Thread {

    private int count = 0;
    //设置一个控制变量
    private boolean loop = true;
    @Override
    public void run() {
        while(loop) {
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("线程"+Thread.currentThread().getName()+(++count ));
        }

    }

    public void setLoop(boolean loop) {
        this.loop = loop;
    }
}

运行结果:

执行5秒后通知子线程退出

二、线程中断

主要运用到yield()方法 

三、线程插队 

应用案例
package interrupt_;
//main线程创建一个子线程,每隔一秒输出hello,输出5次,主线程每隔一秒,输出hi,输出5次
//要求:两个线程同时执行,当主线程输出2次后,就让子线程运行完毕,主线程再继续
public class ThreaadMethod02 {
    public static void main(String[] args) throws InterruptedException {
        T2 t2 = new T2();
        t2.start();
        for (int i = 1;i<=5;i++) {
            Thread.sleep(1000);
            System.out.println("主线程吃了" + i + "个包子");
            if(i == 2){
                t2.join();//子线程插队,子线程执行完毕后主线程继续执行
            }
        }
    }
}

class T2 extends Thread {
    @Override
    public void run() {
        for(int i = 1;i<=5;i++){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("子线程吃了" + i + "个包子");
        }
    }
}

运行结果

线程常用方法

1.setName            设置线程名称,使之与参数 name 相同
2.getName            返回该线程的名称
3.start                   使该线程开始执行;Java 虚拟机底层调用该线程的 start0 方法
4.run                     调用线程对象run方法;
5.setPriority         更改线程的优先级
6.getPriority         获取线程的优先级
7.sleep                  在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)    
8.interrupt            中断线 程

9.yield                   线程的礼让。让出cpu,让其他线程执行,但礼让的时间不确定,

                              所以也不一定礼让成功

10.join                      线程的插队。插队的线程一旦插队成功,则肯定先执行完插入的线程所有的                                     任务

注意事项和细节

1.start底层会创建新的线程,调用run,run就是一个简单的方法调用,不会启动新的线程

2.线程优先级的范围

3.interrupt,中断线程,但并没有真正的结束线程。所以一般用于中断正在休眠的线程

4.sleep:线程的静态方法,使当前的 线程休眠

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/644358.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号