多线程的使用(二)

设置成后台(守护)进程

咱们默认创建的线程是"前台线程",前台线程会阻止进程退出,如果主线程(main线程)运行完了,前台线程还没完,则进程不会退出(主线程也是前台线程)

如果是"后台线程",后台线程不会阻止进程退出,如果其他前台线程都执行完了,那么即使后台线程没有执行完,进程也会退出

写法:线程对象名.setDaemon(true);

线程中断

线程中断就是让线程提前结束,本质上是让run方法尽快结束,而不是强制结束run方法

第一种方法:自定义标志位,作为线程是否结束的标记(在主线程中调节标记的true or false)

第二种方式:使用标准库中自带的标志位

1、设置标志位:Thread.currentThread().isInterrupted();

currentThread方法是Thread的静态方法,通过这个方法可以拿到当前线程的Thread对象,isInterrupted方法判断是否被中断

2、中断线程:线程对象名.interrupt();

如果要中断的线程当前在运行状态,则会设置标志位为true,如果线程当前在阻塞状态(sleep),不会设置标志位,而是会触发一个InterruptedException异常,这个异常会把sleep提前唤醒(如果要结束循环直接break掉)

java中线程的状态

在操作系统中,对于PCB有一个状态的描述,但是java觉得自带的状态不是特别合适,因此自己又搞了一套状态规则

NEW:Thread对象创建出来了,但是还没有真正的创建线程(内核的PCB还没有创建)

TERMINATED:真正的线程已经销毁了(内核的PCB已经销毁),但是Thread对象还在


RUNNABLE:就绪状态(正在CPU上运行+在就绪序列中排队)


TIMED_WAITING:按照一定的时间来阻塞(sleep)

WAITING:特殊的阻塞状态,调用wait

BLOCKED:等待锁的时候进入阻塞状态

 

 

Thread常见属性

ID---获取方法:getId()

这个ID是java中给Thread对象安排的身份标识,和操作系统内核中的PCB中的pid以及和操作系统中的线程ID都不是一回事

名称---获取方法:getName()

这个名称是刚才给线程起名字的那个名字

状态---获取方法:getState()

优先级---获取方法:getPriority()

是否是后台线程(守护线程)---获取方法:isDaemon()

线程是否存活---获取方法:isAlive()

是否被中断---获取方法:isInterrupted()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值