线程休眠sleep()方法的运用

在多线程编程中,有时需要让某个线程优先执行。除了可以设置这个线程的优先级为最高外,
更加理想的方法是休眠其他线程,若有线程中断了正在休眠的线程,则抛出InterruptedException.

--如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3894793.html "谢谢--

sleep()方法是Thread类的一个静态方法,主要实现有:

sleep(long millis) : 让线程休眠指定的毫秒数
sleep(long millis,int nanos) : 让线程休眠指定的毫秒数加纳秒数

代码实例:

package com.xhj.thread;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
* 用龟兔赛跑来描述sleep()的作用
*
* @author XIEHEJUN
*
*/
public class SleepThread implements Runnable {

/**
* 执行兔子赛跑线程
*/
@Override
public void run() {
  for (int i = 1; i < 11; i++) {
    try {
    Thread.sleep(1);
    } catch (Exception e) {
    e.printStackTrace();
    }
    // 格式化当前日期
    SimpleDateFormat sdf = new SimpleDateFormat("k:m:s");
    String result = sdf.format(new Date());

    System.out.println("系统时间:" + result + "\t兔子跑了" + i * 10 + "米");
    if (i == 9) {
      System.out.println("没见到乌龟的身影,兔子偷笑的找个地方睡觉去了……");
      try {
        Thread.sleep(10000);
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    if (i == 10) {
      try {
        Thread.sleep(1);
      } catch (Exception e) {
        e.printStackTrace();
      }
      System.out.println("兔子到达终点");
    }
  }

}

/**
* 执行乌龟赛跑线程
*
* @return
*/
public Thread turtle() {
  class Turtle implements Runnable {
  @Override
  public void run() {
    for (int i = 1; i < 21; i++) {
      try {
        Thread.sleep(1);
      } catch (Exception e) {
        e.printStackTrace();
      }
      // 格式化当前日期
      SimpleDateFormat sdf = new SimpleDateFormat("k:m:s");
      String result = sdf.format(new Date());
      System.out.println("系统时间:" + result + "\t乌龟跑了" + i * 5+ "米");
      if (i == 20) {
        try {
          Thread.sleep(1);
        } catch (Exception e) {
          e.printStackTrace();
        }
        System.out.println("乌龟到达终点");
      }
    }

  }

  }
  Thread thread = new Thread(new Turtle());
  return thread;
}

public static void main(String[] args) {
  SleepThread sleep = new SleepThread();
  Thread rabthread = new Thread(sleep);
  Thread turThread = new Thread(sleep.turtle());
  System.out.println("比赛开始:");
  rabthread.start();
  turThread.start();

  }

}

java笔记--线程休眠sleep()的运用的更多相关文章

  1. Java笔记 - 线程与并行API

    一.线程简介 1.线程与进程 每个进程都具有独立的代码和数据空间,进程间的切换会有较大的开销.线程是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开 ...

  2. 关于java中线程休眠的另一种写法

    编辑器加载中... 优先使用TimeUnit类中的sleep() TimeUnit是什么? TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的 ...

  3. java笔记线程电影院卖票最终版

    * 如何解决线程安全问题呢? *  * 要想解决问题,就要知道哪些原因会导致出问题:(而且这些原因也是以后我们判断一个程序是否会有线程安全问题的标准) * A:是否是多线程环境 * B:是否有共享数据 ...

  4. java笔记----线程状态转换函数

    注意:stop().suspend()和 resume()方法现在已经不提倡使用,这些方法在虚拟机中可能引起“死锁”现象.suspend()和 resume()方法的替代方法是 wait()和 sle ...

  5. java笔记--线程的插队行为

    对线程的插队行为的理解 在编写多线程时,会遇到让一个线程优先于其他线程运行的情况, 此时除了可以设置其优先级高于其他线程外,更直接的方式是使用Thread类的join()方法 --如果朋友您想转载本文 ...

  6. java笔记线程电影院卖票改进版

    通过加入延迟后,就产生了连个问题: * A:相同的票卖了多次 *   CPU的一次操作必须是原子性的 * B:出现了负数票 *   随机性和延迟导致的 public class SellTicketD ...

  7. java笔记线程两种方式模拟电影院卖票

    public class SellTicketDemo { public static void main(String[] args) { // 创建三个线程对象 SellTicket st1 = ...

  8. java笔记线程方式1线程暂停yield

    public static void yield():暂停当前正在执行的线程对象,并执行其他线程. 让多个线程的执行更和谐,但是不能靠它保证一人一次. public class ThreadYield ...

  9. java笔记线程方式1线程终端与停止

    public final void stop():让线程停止,过时了,但是还可以使用.public void interrupt():中断线程. 把线程的状态终止,并抛出一个InterruptedEx ...

随机推荐

  1. 计算机硬件的五大单元 & CPU的种类 & 计算机的运行流程

    不多说,直接上干货! 计算机硬件的五大单元 关于计算机的组成部分,其实你可以观察你的桌面计算机分析一下,依外观来说这家伙主要分为三部分: 输入单元:包括键盘.鼠标.卡片阅读机.扫描仪.手写板.触摸屏幕 ...

  2. centos中软件源码简单的编译安装./configure,make ,make install

    参考 Linux下源码编译安装详解 源码编译安装分三个步骤 1. 编译参数配置 2. 编译 3. 安装 1. 源码编译安装环境检查以及编译参数配置 编译器在开始工作之前,需要知道当前的系统环境,比如标 ...

  3. redis实战笔记(3)-第3章 Redis命令

    第3章 Redis命令   本章主要内容 字符串命令. 列表命令和集合命令 散列命令和有序集合命令 发布命令与订阅命令 其他命令   在每个不同的数据类型的章节里, 展示的都是该数据类型所独有的. 最 ...

  4. 用java实现编译器-算术表达式及其语法解析器的实现

    大家在参考本节时,请先阅读以下博文,进行预热: http://blog.csdn.net/tyler_download/article/details/50708807 本节代码下载地址: http: ...

  5. POJ 1251 Jungle Roads(Kruskal算法求解MST)

    题目: The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money w ...

  6. JDK动态代理[2]----JDK动态代理的底层实现之Proxy源码分析

    在上一篇里为大家简单介绍了什么是代理模式?为什么要使用代理模式?并用例子演示了一下静态代理和动态代理的实现,分析了静态代理和动态代理各自的优缺点.在这一篇中笔者打算深入源码为大家剖析JDK动态代理实现 ...

  7. Jsp&Servlet入门级项目全程实录第3讲

    惯例广告一发,对于初学真,真的很有用www.java1234.com,去试试吧! 1.建立数据表及数据(略) 2.装载驱动,建立数据表 <link rel="stylesheet&qu ...

  8. 利用CEF山寨一个翻译器

    起因 在某些情况下,有将从某种类型的语言翻译成另一种类型语言的需求.比如在生成实体时,可能需要将中文名称转换成英文.于是利用CEFSharp山寨了一个翻译器.效果图如下: CEF简介 CEF全称为Ch ...

  9. Nginx面试

    声明:此文章非本人所 原创,是别人分享所得,如有知道原作者是谁可以联系本人,如有转载请加上此段话 1.请解释一下什么是 Nginx? Nginx是一个 web服务器和反向代理服务器,用于 HTTP.H ...

  10. 高并发第十单:J.U.C AQS(AbstractQueuedSynchronizer) 组件:CountDownLatch. CyclicBarrier .Semaphore

    这里有一篇介绍AQS的文章 非常好: Java并发之AQS详解 AQS全名:AbstractQueuedSynchronizer,是并发容器J.U.C(java.lang.concurrent)下lo ...