多线程part4-常见的成员方法

getName()和setName()

String getName()  //返回线程的名称
void setName(String name)  设置线程的名字(构造方法亦可设置)

细节:

  如果我们没有给线程设置名字,默认名字格式为:Thread-x(x序号,从0开始)
  如果给线程设置名字,可以用set方法,也能用构造方法进行设置,但要记得子类也要有

1
2
Thread t3 = new Thread();
t3.setName("飞机");
相当于
Thread t3 = new Thread(”飞机“);

currentThread()

static Thread currentThread()  获取当前线程的对象

细节: 

  我们在main方法下,如果运行如下代码,那么会发现,输出main

        Thread t= Thread.currentThread();
        String name = t.getName();
        System.out.println(name);

 

原因:

  当JVM虚拟机启动之后,会自动启动多条线程
  其中有一条就是main线程
  他的作用就是去调用main方法并执行

sleep()

static void sleep(long time)  让线程休眠指定的时间,单位为毫秒

细节: 

  哪条线程执行到这个方法,那么哪个就会停留
  单位为毫秒 时间倒了之后,线程会自动醒来,继续执行下面的代码

  

  调用sleep会让当前线程从Running进入Time Waiting状态(阻塞)

  其他线程可以使用interrupt方法打断正在睡眠的线程,此时sleep方法会抛出InterruptedException

  睡眠结束后的线程未必会立刻得到执行

  建议使用TimeUnit的sleep来代替Thread的sleep,以得到更好可读性

  TimeUnit把时间单位划分为很多不同的单位,秒、毫秒、微秒、天、小时、分钟、纳秒

 

interrupt()

打断后进行标记,可以通过boolean isInterrupted()进行查看

打断阻塞状态的线程————sleep,wait,join的线程

  当它们被打断时,会以异常的方式表达已被打断,将打断标记清空,所以打断标记会为false

打断正常运行的线程

  不会清空打断标记,打断标记为true

 setPriority()和getPriority()

setPriority(int newPriority) 设置线程优先级

getPriority()      获取优先级

  线程的调度有两种:抢占式:多个线程抢夺cpu执行权,执行哪条线程是不确定的,执行时间也是不确定的(体现随机性);非抢占式:线程轮流执行

  Java中,采取的是抢占式调度

  优先级越大,抢到的概率最大,默认设置为5

  查看源码可以看到,Thread设置了最小为1,最大为10,默认为5

  优先级不是绝对的,优先级高也有可能抢占不到

 

setDaemon()

setDaemon(boolean on)  设置为守护线程

细节:

  当其他的非守护线程执行完毕之后,守护线程会陆续结束

  当非守护线程结束之后,那么守护线程没有存在的必要

  不是立马结束

应用场景:

  QQ聊天,发送文件时,可以把聊天框当成一个线程,发送文件框当成一个线程

  当聊天框被关闭之后,那么发送文件没有存在的必要,那么就可以设置发送文件线程为守护线程

 yield()

static yield()出让线程/礼让线程

  尽可能的出让当前cpu的执行权

  调用yield会让当前线程从Running 进入 Runnable就绪状态,然后调度执行其他线程

  也就是说可能存在你让出去的时候,没有其他线程需要用,所以cpu又把执行权还给你

  具体的实现还是依赖于操作系统的任务调度器

  注释中写道:这是一种尝试,防止过度使用cpu

join()

join()  插入线程/插队线程

  把当前线程插入到当前线程之前

  join()方法必须写在start()方法之后

   当传入参数long n 时,是设置等n毫秒后开抢,n毫秒是上限,不一定等到n毫秒

posted @   名泽  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示