Thread API
2019-03-11 19:05:49 0 举报
AI智能生成
Thread常用api
作者其他创作
大纲/内容
isAlive()
public final native boolean isAlive();
判断某一线程是否属于活动状态
sleep()
public <font color="#c41230">static</font> native void sleep(long millis) throws InterruptedException;
<font color="#c41230">静态方法</font>,让当前正在执行的线程休眠一定的毫秒数
休眠过程不会释放锁
interrupt()
public void interrupt()
为某一线程打上一个<font color="#c41230">中断标记</font>,但不会真正去停止线程
<font color="#c41230">sleep状态下调用interrupt()或者interrupt后调用sleep()均会抛出InterruptedException异常</font>
isInterrupted()
public boolean isInterrupted()
判断某一线程是否被打上<font color="#c41230">中断标记</font>
不会清除中断标记
内部调用isInterrupted(<font color="#c41230">false</font>),false代表不·清除中断标记
stop()
public final void stop()
强行停止线程,该方法已经废弃
强行停止线程会导致<font color="#c41230">一些资源无法得到清理</font>或者导致<font color="#c41230">数据不一致</font>
suspend()
public final void suspend()
暂停线程,该方法已经废弃
能够造成同步锁的独占,导致其他线程无法访问同步锁
能够造成读取数据不同步的情况
yield()
public static native void yield()
使线程放弃当前的cpu资源,将其让给其他任务
放弃cpu资源的时间不确定,且有可能刚放弃就马上获得cpu资源
setDaemon()
public final void setDaemon(boolean on)
设置为守护线程,默认为false
守护线程为非守护线程<font color="#c41230">提供服务</font>,只要当前JVM实例中还有非守护线程在工作,守护线程就在工作
如GC线程
创建方式
继承Thread类
实现Runnable接口
currentThread()
public static native Thread currentThread();
<font color="#c41230">静态方法</font>,返回当前代码段正在被哪个线程调用的信息,即正在执行的线程
与this的区别:this只表示当前类实例
getId()
取得线程唯一标识
public long getId()
interrupted()
public <font color="#c41230">static</font> boolean interrupted()
<font color="#c41230">静态方法</font>,判断当前正在执行线程是否被打上<font color="#c41230">中断标记</font>
会清除中断标记,即第二次调用永远是false
内部调用Thread.currentThread().isInterrupted(<font color="#c41230">true</font>),true代表清除中断标记
如何停止线程?
如何停止程序?
return
抛异常
如何停止循环?
break
结论
方式1
自定义flag<br>
程序内判断flag值来决定是否停止线程<br>
提供stop方法来改变flag值,外部需要停止线程时直接调用
方式2
程序内通过interrupted()或isInterrupted()来判断是否停止线程
外部需要停止线程时使用interrput()方法
resume()
public final void resume()
恢复被suspend暂停的线程
setPriority()
public final void setPriority(int newPriority)
线程可以划分优先级,优先级高的得到cpu资源就多
优先级最大为<font color="#c41230">10</font>,最小为<font color="#c41230">1</font>,普通默认为<font color="#c41230">5</font>,超出范围会抛出异常
线程优先级具有<font color="#c41230">随机性</font>,并不是优先级高的每一次都先执行完
总体来说,优先级高的线程总是<font color="#c41230">大部分</font>先执行完,运行的更快
优先级具有<font color="#c41230">继承性</font>,如A线程中去启动B线程,则B线程的优先级与A是一样的
收藏
0 条评论
下一页