学习多线程——必会的的9个方法

乱入:

定义一个线程可以继承Thread类,也可以实现Runnable接口,但是都需要重写run()方法,在run方法中的异常只能使用try...catch来进行捕获而不能是throw上抛异常。因为重写的run方法没有抛异常。

废话不多说,这篇文章里面主要介绍的是学习多线程的过程中必会的几个方法,在这里做个讲解,巩固一下知识点;

一、concurrentThread()——获取当前运行的线程对象

Thread.concurrentThread()方法可以获取到当前运行的线程。我们在运行代码的时候,同一段代码可能会被多个线程执行,我们使用Thread.concurrentThread()的时候,返回给我们的就是目前实际正在运行的线程对象。

二、setName()/getName()——设置/获取线程名称

thread.setName()方法:设置线程名称

thread.getName()方法:获取线程名称

我们在执行线程的时候,为了方便区别不同的线程,可以使用thread.setName()方法为线程设置一个名称,使用thread.getName()方法可以获取我们为线程设置的名称。

三、isAlive()——判断线程存活状态

thread.isAlive()方法用于判断当前运行的线程是否是已启动并且尚未终止。

四、sleep()方法——线程睡眠

Thread.sleep(millis)方法,让当前运行的线程对象休眠指定的毫秒数

五、getId()——获取线程唯一标识id

每条线程都有自己的唯一标识符id,使用Thread.currentThread().getId()方法可以返回当前线程的唯一标识符Id,当此线程执行结束之后,其唯一标识符id可能会被分配给其他的线程使用。

六、yeild()——放弃CPU资源

每个线程的执行都必须先获取到CPU的执行权,而Thread.yeild()方法的作用是让当前的线程放弃cpu的资源(也叫线程让步)。

七、setPriority()——设置线程优先级

thread.setPriority(num)设置线程的优先级,线程的优先级范围为1到10,执行的优先级依次增高。如果超出此范围,会抛出异常IllegaArgumentException()。优先级越高的线程,获取CPU资源也就会越多。线程优先级本质上只是给线程调度器一个提示信息,以便于线程调度器先调用哪些线程。但是:不能保证优先级越高的线程会被优先执行

线程饥饿:线程的优先级设置不当可能会使得某些线程永远无法被执行,也叫做线程饥饿。

线程的优先级并不是越高越好,一般情况下我们使用默认的线程优先级就可以了。默认的线程优先级是5

线程的优先级具有继承性,假如你在A线程中创建了B线程,那么A线程就是父线程,B线程就是子线程,子线程的优先级会与父线程的优先级保持一致。

八、interrupt()——打中断标记

thread.interrupt()方法用于为线程打上停止标记,并不是真正的直接中断线程。如果我们想直接中断线程,可以使用this.isinterrupted()方法判断当前的线程是否被打上了中断标记,如果该方法返回true,则可以使用return方法直接中断当前的方法体的执行。

写一个测试:

public class Thread1 extends  Thread{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            if(this.isInterrupted()){
                System.out.println("线程被打上中断标记");
                return;
            }
            System.out.println(this.getName()+"执行==》"+i);
        }

    }
}


public class ThreadTest {
    public static void main (String[] args){
        Thread1 thread1 = new Thread1();
        thread1.start();
        for (int i = 0; i < 10; i++) {
            System.out.println("线程执行===》"+i);
        }
//        thread1.interrupt(); //不打中断标记,thread1线程能够正常执行,打上此标记,thread1线程
//                              通过this.isinterrupted()方法进行判断,从而对方法体执行中止。
    }
}

九、setDaemon()——设置守护线程

线程可以分为守护线程和用户线程。

守护线程:守护线程是专门为其他线程服务的线程。我们常说的垃圾回收器(GC)就是一个典型的守护线程。

                守护线程在JVM中不能单独运行,如果没有其他的用户线程运行的时候,守护线程就会自动销毁,然后JVM退出。

thread.setDaemon(true)方法可以设置thread线程为守护线程

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值