小白都爱看的多线程系列 (二)

1.Thread 类的基本用法

  • 线程创建

  • Thread()

  1. 继承 Thread, 重写 run
  2. 实现 Runnable, 重写 run
  3. 继承 Thread, 重写 run, 使用匿名内部类
  4. 实现 Runnable, 重写 run, 使用匿名内部类
  5. 使用 lambda 表达式

详细五种在系列一中提到请跳转多线程系列(一)https://blog.csdn.net/landuommm/article/details/149119261?fromshare=blogdetail&sharetype=blogdetail&sharerId=149119261&sharerefer=PC&sharesource=landuommm&sharefrom=from_link

  • 线程中断

  • isInterrupted()

简单理解线程t来判断是否中断了 t

如果线程t中断则.isInterrupted()的返回值为true,反之为false

注意:

此时lambda表达式的定义是在new Thread之前,也就是还没创建对象t

这时候我们就要用到Thread.currentThread()方法了

currentThread()

currentThread()也是种静态方法,哪个对象调用这个方法,就返回哪个对象的引用

由于currentThread方法,是在t.start 之后,才执行的,并且currentThread是在t线程中执行的,所以在t线程中,执行currentThread方法,得到的是t线程的引用。

这里再 同样引入一个方法

interrupt()

作用:把标志位由false变为true

而isinterrupted()表示一种状态,interrupt()表示修改状态的一种方式

(可以理解为一种为形容词,一种为动词)

特殊情况

线程终止这里有个奇怪设定:

如果t线程正在sleep,此时main中调用interrupt方法,就会把sleep提前唤醒

//interrupt会把sleep状态提前唤醒,就会抛出异常,这时就会把isIterrupted状态由true改为false

在catch中打印,是为了证明,异常会把isIterrupted状态由true改为false

ps:图中还出现break,添加break让线程终止

//在break之前,也可以加一些别的程序,就像相当于dosomething();稍后结束

总结

使用 Interrupt 方法的时候:
1. t 线程没有进行 sleep 等阻塞操作
t 的 isInterrupted() 方法返回 true
通过循环条件结束 t 线程
2. t 线程中进行了 sleep 等阻塞操作
t 的 isInterrupted() 还是会返回 true
但是 sleep 如果是被提前唤醒,抛出 InterruptedException
同时也会把 isInterrupted() 的返回结果设为 false
此时就需要手动决定是否要结束线程了

  • 线程等待

join()

线程t调用join()方法 t.join()表示线程t"被等待”,main线程为“等待的一方”

通俗理解字面意思:主线程等待t线程执行完后再执行(main等待t的加入)

结果:

  • 线程休眠

Thread.sleep()

Thread.sleep(long millis)  //时间为毫秒为单位

  • 获取线程实例

Thread.currentThread()

简单来说就是:返回当前线程对象的引用(上文有详细提及,见目录)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值