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