java中Thread的停止

Thred的停止.png

在对线程进行停止的使用,我们使用Thread类来进行操作,这里停止的状态分为三种:sleep、join和yield。它们都是使当前的线程停下来,不过在中断时有所区别。下面我们就java中Thread类的三种停止模式,分别带来概念和代码示例的讲解,一起看看都有哪些停止状态吧。

1.sleep

sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用,以留一定时间给其他线程执行

sleep休眠时不会释放对象的锁

publicclassSleepDemo{
publicstaticvoidmain(String[]args)throwsInterruptedException{
Processprocess=newProcess();
Threadthread=newThread(process);
thread.setName("线程Process");
thread.start();

for(inti=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+"-->"+i);
//阻塞main线程,休眠一秒钟
Thread.sleep(1000);
}
}
}

/**
*线程类
*/
classProcessimplementsRunnable{

@Override
publicvoidrun(){

for(inti=0;i<10;i++){
System.out.println(Thread.currentThread().getName()+"-->"+i);

//休眠一秒钟
try{
Thread.sleep(1000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
}

}
}

2.join

在一个线程A中执行了线程B的join方法,则A会挂起,等待B执行完毕后再执行后续任务。

publicstaticvoidmain(String[]args){
Threadt1=newThread();
t1.start();
t1.join();
//以下代码会在t1执行完毕后打印
System.out.println("t1finished");
}

3.yield

yield并不意味着退出和暂停,是让步,告诉线程调度如果有人需要,可以先拿去,我过会再执行,没人需要,我继续执行。

调用yield的时候锁并没有被释放。

packagecom.yield;

publicclassYieldTestextendsThread{

publicYieldTest(Stringname){
super(name);
}

@Override
publicvoidrun(){
for(inti=1;i<=50;i++){
System.out.println(""+this.getName()+"-----"+i);
//当i为30时,该线程就会把CPU时间让掉,让其他或者自己的线程执行(也就是谁先抢到谁执行)
if(i==30){
this.yield();
}
}
}

publicstaticvoidmain(String[]args){
YieldTestyt1=newYieldTest("张三");
YieldTestyt2=newYieldTest("李四");
yt1.start();
yt2.start();
}
}
原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容