在对线程进行停止的使用,我们使用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
暂无评论内容