Sleep
sleep()方法是Thread类提供的静态方法,在哪个线程中调用,哪个线程阻塞,一般用于模拟网络延时和用于倒计时。时间到了之后自动进入就绪状态。
利用sleep方法实现倒计时效果。
public class CountDown {
public static void main(String[] args) throws InterruptedException {
int time=10;
while (true)
{
Thread.sleep(1000);
if(time==0)
{
System.out.println("来辣来辣来辣!!!");
break;
}
System.out.println(time--);
}
}
}
Thread.Sleep(0)的作用,就是“触发操作系统立刻重新进行一次CPU竞争”。竞争的结果也许是当前线程仍然获得CPU控制权,也许会换成别的线程获得CPU控制权。
代码示例
/**
* yield方法礼让测试
* @author 无力韬韬
*/
public class YieldDemo implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"==>Start");
try {
Thread.sleep(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"==>End");
}
public static void main(String[] args) {
YieldDemo yieldDemo1=new YieldDemo();
YieldDemo yieldDemo2=new YieldDemo();
new Thread(yieldDemo1,"小明").start();
new Thread(yieldDemo2,"小红").start();
}
}
CPU还是分配给了小红
CPU给了小明
Yield
yield()方法也是Thread类提供的静态方法,改线程使用yield方法,直接由运行状态重回就绪状态,和sleep(0)作用一样。
代码示例
/**
* yield方法礼让测试
* @author 无力韬韬
*/
public class YieldDemo implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"==>Start");
Thread.yield();
System.out.println(Thread.currentThread().getName()+"==>End");
}
public static void main(String[] args) {
YieldDemo yieldDemo1=new YieldDemo();
YieldDemo yieldDemo2=new YieldDemo();
new Thread(yieldDemo1,"小明").start();
new Thread(yieldDemo2,"小红").start();
}
}
小明礼让之后小红分配了CPU
小明礼让之后还是分配给了小明
Join
join()方法是一个成员方法,不能通过Thread类直接调用。
代码示例
/**
* @author 无力韬韬
*/
public class JoinDemo {
public static void main(String[] args) throws InterruptedException {
Roober roober=new Roober();
Thread thread=new Thread(roober);
thread.start();
for (int i=10;i>0;i--)
{
System.out.println("前面还有"+i+"个人");
if (i==4)
{
thread.join();
}
}
}
}
class Roober implements Runnable
{
@Override
public void run() {
for (int i=10;i>0;i--)
{
System.out.println("小R前面还有"+i+"个人");
}
}
}
主线程中调用了 thread.join()方法,主线程被阻塞,thread线程运行。
结果 注释掉join方法之后
网友评论