import java.util.Date;
//线程暂停
public class SleepTest {
public static void main(String[] args) throws Exception{
for (int i = 0; i < 10; i++) {
System.out.println("当前时间: "+new Date());
Thread.sleep(1000);
}
}
}
/*
* yield()方法也可以暂停当前正在执行的线程,但它不会阻塞该线程,它只是将该线程转入就绪状态
* yield()方法只是让当前线程暂停一下,让系统的线程调度器再次调度一次,完全可能的情况是:当某个线程
* 调用了yield()方法暂停之后,线程调度器又将其调度出来重新执行。
*/
public class YieldTest extends Thread{
public YieldTest(String name){
super(name);
}
public void run(){
for (int i = 0; i < 50; i++) {
System.out.println(getName()+" "+i);
if (i == 20) {
Thread.yield();
}
}
}
public static void main(String[] args) throws Exception{
YieldTest yt1 = new YieldTest("高级");
yt1.setPriority(Thread.MAX_PRIORITY);
yt1.start();
YieldTest yt2 = new YieldTest("低级");
yt2.setPriority(Thread.MIN_PRIORITY);
yt2.start();
}
}
//sleep()方法和yield()方法的区别:
//1.sleep()方法暂停当前线程后会给其他线程执行机会,不理会优先级,而yield()只给同优先级或更高优先级机会
//2.sleep()将线程转入阻塞状态,yield()将线程转入就绪状态
//3.sleep()方法声明抛出了InterruptedException异常,要么捕获该异常,要么显示声明抛出该异常,而yield()
//则没有声明抛出任何异常
//4.sleep()比yield()有更好的移植性,通常不用yield来控制并发线程的执行