3、线程的休眠

来源:互联网 发布:cpc广告发布网站源码 编辑:程序博客网 时间:2024/06/06 15:43

在当前线程的执行中,暂停指定的毫秒数,释放cpu的时间片


假设cpu按照一定顺序执行每个进程,为每个进程分配时间。

当cpu分配给进程1三秒钟的时间,AB线程则竞争者3秒钟的时间

如果A线程3秒内执行完了就ok了。如果没执行完,执行到一半。则需要等待下次cpu为进程1分配时间。则AB两线程再次竞争时间。

但是,当两个线程都存在休眠的情况下,假设cpu分配3秒钟的时间,A执行完1秒后休眠,则释放时间片让给B执行,B执行一秒后休眠,让给A执行。当下次CPU分配时间后,两个线程再次竞争,然后轮流执行和休眠


休眠虽然会让程序执行变慢,但是可以使进程中的多个线程都抢到执行时间。如果没有休眠我们是无法控制哪个线程先执行,执行多少时间。

在哪个方法里调用sleep,表示哪个线程进入休眠

package com.chocus.demo1;public class ThreadDemo01 {  public static void main(String[] args) {    // 虽然mt和t都调用了start方法,但是谁先执行时不一定的,和代码顺序无关,具有随机性    MyThread mt = new MyThread();    mt.start();    MyRunnable mr = new MyRunnable();    Thread t = new Thread(mr);    t.start();  }}/** * 第一种实现线程的方式:继承Thread类 *  * @author Chocus * */class MyThread extends Thread {  @Override  public void run() {    for (int i = 0; i < 100; i++) {      System.out.println(Thread.currentThread().getName() + "-" + i);      try {        Thread.sleep(100);      } catch (InterruptedException e) {        e.printStackTrace();      }    }  }}/** * 第二种实现线程的方式:实现Runnable接口 *  * @author Chocus * */class MyRunnable implements Runnable {  @Override  public void run() {    for (int i = 0; i < 100; i++) {      System.out.println(Thread.currentThread().getName() + "-" + i);      try {        Thread.sleep(100);      } catch (InterruptedException e) {        e.printStackTrace();      }    }  }}

结果

Thread-0-0Thread-1-0Thread-1-1Thread-0-1Thread-0-2Thread-1-2Thread-0-3Thread-1-3Thread-0-4Thread-1-4Thread-1-5Thread-0-5Thread-1-6Thread-0-6。。。。。。




原创粉丝点击