线程睡眠:Thread.sleep()方法

public class ThreadSleep extends Thread 
{
public void run(){
for(int a=0;a<50;a++){
try{Thread.sleep(500);}catch(InterruptedException e){}
System.out.println(Thread.currentThread().getName()+" : "+a);
}
}
public static void main(String[] args)
{
ThreadSleep t1=new ThreadSleep();
ThreadSleep t2=new ThreadSleep();
t1.start();
t2.start();
}
}
在java程序中要创建一个线程有两种方法,一种是extends Thread;另一种是implements Runnable;
当然推荐使用implements Runnable这种方法,
但是当我们要在一个线程中使用sleep()方法时,如果使用extends Thread方法去创建类那么可以直接使用sleep()方法,如果使用的是implements Runnable创建类,那么必须是Thread.sleep()的格式,否则编译器报错。


   1.Thread.Sleep(XXXX)函数就是干这种事的,他告诉操作系统“在未来的多少毫秒内我不参与CPU竞争”。

 

   2.而Thread.Sleep(0)的作用,就是“触发操作系统立刻重新进行一次CPU竞争”。

    竞争 的结果也许是当前线程仍然获得CPU控制权,也许会换成别的线程获得CPU控制权。这也是我们在大循环里面经

常 会写一句Thread.Sleep(0) ,因为这样就给了其他线程比如Paint线程获得CPU控制权的权力,这样界面就不会假死在那里。

 

 

 

补充: 1.在Windows原理层面,CPU竞争都是线程级的。

          2.操作系统中,CPU竞争有很多种策略。Unix系统使用的是时间片算法,而Windows则属于抢占式的。 在时间  片算法中,所有的进程排成一个队列。操作系统按照他们的顺序,给每个进程分配一段时间,即该进程 允许运行的时间。如果在 时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程 序所要做的就是维护一张就绪进程列表,,当进程用完它的时间片后,它被移到队列的末尾。 所谓抢占式操作系统,就是说如果一个进程得到了 CPU 时间,除非它自己放弃使用 CPU ,否则将完全霸占 CPU 。因此可以看出,在抢 占式操作系统中,操作系统假设所有的进程都是“人品很好”的,会主动退出 CPU 。 在抢占式操作系统中,假设有若干进程,操作系统会根据他们的优先级、饥饿时间(已经多长时间没有使用过 CPU 了),给他们算出一 个总的优先级来。操作系统就会把 CPU 交给总优先级最高的这个进程。当进程执行完毕或者自己主动挂起后,操作系统就会重新计算一 次所有进程的总优先级,然后再挑一个优先级最高的把 CPU 控制权交给他。

分享到:

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值