多线程中一些常见方法和一些不推荐使用的方法

Posted 杀手不太冷!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程中一些常见方法和一些不推荐使用的方法相关的知识,希望对你有一定的参考价值。

多线程中一些常见方法和一些不推荐使用的方法

多线程中一些常见方法

start():启动一个新线程,在新的线程运行run方法中的代码,start方法只是让线程进入就绪状态,里面的代码不一定立刻运行(CPU的时间片还没分给它),每个线程对象的start方法只能调用一次,如果调用了多次会出现IllegalThreadStateException

run():新线程启动后会调用的方法,如果在构造Thread对象时传递了Runnable参数,则线程启动后会调用Runnable中的run方法,否则默认不执行任何操作。但可以创建Thread的子类对象,来覆盖默认行为

join():等待线程运行结束,如下图:

在这里插入图片描述

join(long n):等待线程运行结束,最多等待n毫秒

getId():获取线程长整形的id,id唯一

getName():获取线程名

setName(String):修改线程名

getPriority():获取线程优先级

setPriority():修改线程优先级

getState():获取线程状态,Java中线程状态是用6个enum表示,分别为:new,runnable,blocked,waiting,timed_waitng,terminated,

新建(NEW):当新创建一个线程对象,没有调用start方法之前,此线程的状态是NEW状态,如下图:

在这里插入图片描述

可运行(RUNNABLE):线程对象创建之后,其它线程比如main线程调用了此线程的start方法,此线程处于可运行状态,会被加入到可运行线程池里,等待被线程调度选中,获取cpu的使用权,如下图:

在这里插入图片描述

Waiting等待状态:当你调用了wait,join方法后,就会进入这个状态。一旦进入这个状态,CPU就不管你了,直到有别的线程通过notify方法将它唤醒,如下图:

在这里插入图片描述

Timed_Waiting定时等待状态:这个状态也是等待,但是有一个计时器在里面,最常用的是使用Thread.sleep方法触发,触发后,线程就进入了Timed_waitting状态,随后会由计时器触发,再进入Runnable状态,如下图:

在这里插入图片描述

Terminated终结状态:终结状态,当线程的所有代码都被执行完毕后,会进入到这个状态,如下图:

在这里插入图片描述

Bolcked阻塞状态:一个线程想要获得锁但是获得不了,就会进入这个状态,如下图:

在这里插入图片描述

在Thread构造器的后面添加一个花括号,重写Thread类里面的方法,如下图:

在这里插入图片描述

isInterrupted():获取线程的打断标记,如果被打断了,返回true,如果没有被打断返回false,但是对于执行了sleep,wait,join方法的线程,打断后不会有打断标记,也即是打断后标记仍是false,如下图:

在这里插入图片描述

打断标记为true的正常打断情况,如下图:

在这里插入图片描述

在这里插入图片描述

isAlive():线程是否存活(还没有运行完毕)

interrupt():打断线程,如果被打断线程正在sleep,wait,join会导致被打断的线程抛出InterruptedException,并清楚打断标记;如果打断的正在运行的线程,则会设置打断标记;测试interrupt()方法抛出异常的情况如下图:

在这里插入图片描述

currentThread():获取当前正在执行的线程

sleep(long n):让当前执行的线程休眠n毫秒,休眠时让出cpu的时间片给其它线程,如下图:

在这里插入图片描述

yield():提示线程调度器让出当前线程对CPU的使用,调用yield方法会让当前线程从Running状态进入Runnable就绪状态,然后调度执行其它线程,具体的实现依赖于操作系统的任务调度器

park()方法:此方法可以让当前线程暂停,如下图:

在这里插入图片描述

如果给当前线程设置一个打断标记,那么当前线程会恢复运行,如下图:

在这里插入图片描述

当有打断标记的时候,即打断标记的值为true的时候,LockSupport.park()此句代码是无效的,即不能够使线程暂停,如下图:

在这里插入图片描述

不推荐使用的方法

还有一些不推荐使用的方法,这些方法已过时,容易破坏同步代码块,使锁得不到释放,造成线程死锁。

方法名 功能说明

stop() 挂起(暂停)线程运行

resume() 恢复线程运行

以上是关于多线程中一些常见方法和一些不推荐使用的方法的主要内容,如果未能解决你的问题,请参考以下文章

多线程 — 线程中一些常用的方法和关键字

Java多线程中joinyieldsleep方法详解

Java多线程学习(吐血超详细总结)

C# 多线程更新界面的错误方法

Java多线程学习(吐血超详细总结)转

多线程执行一些细节