Java线程调度之线程休眠用法分析
本文实例分析了Java线程调度之线程休眠用法。分享给大家供大家参考。具体分析如下:
Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。
这里要明确的一点,不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制。
线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休眠一定时间后,线程会苏醒,进入准备状态等待执行。
线程休眠的方法是Thread.sleep(long millis) 和Thread.sleep(long millis, int nanos) ,均为静态方法,那调用sleep休眠的哪个线程呢?简单说,哪个线程调用sleep,就休眠哪个线程。
/** * Java线程:线程的调度-休眠 * * @author leizhimin 2009-11-4 9:02:40 */ public class Test { public static void main(String[] args) { Thread t1 = new MyThread1(); Thread t2 = new Thread(new MyRunnable()); t1.start(); t2.start(); } } class MyThread1 extends Thread { public void run() { for (int i = 0; i < 3; i++) { System.out.println("线程1第" + i + "次执行!"); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } } class MyRunnable implements Runnable { public void run() { for (int i = 0; i < 3; i++) { System.out.println("线程2第" + i + "次执行!"); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } }
运行结果如下:
线程2第0次执行! 线程1第0次执行! 线程1第1次执行! 线程2第1次执行! 线程1第2次执行! 线程2第2次执行! Process finished with exit code 0
从上面的结果输出可以看出,无法精准保证线程执行次序。
相关推荐
-
Java并发编程示例(五):线程休眠与恢复
有时,我们需要在指定的时间点中断正在执行的线程.比如,每分钟检查一次传感器状态的线程,其余时间,线程不需要做任何事情.在此期间,线程不需要使用计算机的任何资源.过了这段时间之后,并且当Java虚拟机调度了该线程,则该线程继续执行.为此,你可以使用Thread类的sleeep()方法.该方法以休眠的方式来推迟线程的执行,而且整数类型的参数则指明休眠的毫秒数.当调用sleep()方法,休眠时间结束后,Java虚拟机分配给线程CPU运行时间,线程就会继续执行. 另一种是用sleep()方法的方式是通过
-
java基本教程之线程休眠 java多线程教程
本章涉及到的内容包括:1. sleep()介绍2. sleep()示例3. sleep() 与 wait()的比较 1. sleep()介绍sleep() 定义在Thread.java中.sleep() 的作用是让当前线程休眠,即当前线程会从"运行状态"进入到"休眠(阻塞)状态".sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间:在线程重新被唤醒时,它会由"阻塞状态"变成"就绪状态",从而等待cpu的调度执行
-
Java中线程休眠编程实例
import java.awt.*; import java.util.*; import javax.swing.*; public class SleepMethodTest extends JFrame { /** * */ private static final long serialVersionUID = 1L; private Thread t; // 定义颜色数组 private static Color[] color = { Color.BLACK, Color.BLUE,
-
详解Java中的线程让步yield()与线程休眠sleep()方法
线程让步: yield() yield()的作用是让步.它能让当前线程由"运行状态"进入到"就绪状态",从而让其它具有相同优先级的等待线程获取执行权:但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权:也有可能是当前线程又进入到"运行状态"继续运行! 示例: class ThreadA extends Thread{ public ThreadA(String name){ super(name); }
-
Java线程休眠_动力节点Java学院整理
sleep()介绍 sleep() 定义在Thread.java中. sleep() 的作用是让当前线程休眠,即当前线程会从"运行状态"进入到"休眠(阻塞)状态".sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间:在线程重新被唤醒时,它会由"阻塞状态"变成"就绪状态",从而等待cpu的调度执行. sleep()示例 下面通过一个简单示例演示sleep()的用法. // SleepTest.java的源码 cl
-
Java线程调度之线程休眠用法分析
本文实例分析了Java线程调度之线程休眠用法.分享给大家供大家参考.具体分析如下: Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率. 这里要明确的一点,不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制. 线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休眠一定时间后,线程会苏醒,进入准备状态等待执行. 线程休眠的方法是Thread.sleep
-
java中最大的整数用法分析
本文实例讲述了java中最大的整数用法.分享给大家供大家参考,具体如下: 8种基本数据类型中,long类型所能表示的整数范围是最大的,但还是有限的.另外,基本数据类型中的整数还有一个问题,那就是不是每个数都能够正确的取负数.例如,对int型而言,"-2147483648"取负就不能得到正确的结果,对其他整数类型也有这个问题. 为了解决这些问题,Java中专门提供了用来进行不限制大小的整数计算的类--java.math.BigInteger.该类可以对任意大小的整数进行操作,不过在进行计
-
Java中join线程操作实例分析
本文实例讲述了Java中join线程操作.分享给大家供大家参考,具体如下: 一 点睛 Tread提供了让一个线程等待另外一个线程完成的方法--join()方法.当在某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的join线程执行完后为止. join()方法通常由使用线程的程序调用,以将大问题划分成许多小问题,每个小问题分配一个线程.当所有小问题都得到处理后,再调用主线程来进一步操作. 二 代码 public class JoinThread ext
-
Java异常处理与throws关键字用法分析
本文实例讲述了Java异常处理与throws关键字用法.分享给大家供大家参考,具体如下: Java异常处理 认识异常: 1.异常是导致程序中断运行的一种指令流,如果不对异常进行正确处理,则可能导致程序的中断执行,造成不必要的损失. 2.异常范例 空指针异常 Exc e=null; System.out.println(e.i); 除0异常 int a=10; int b=0; System.out.println(a/b); 3.处理异常 异常格式: try{ 异常语句: } catch(Exc
-
Java 的抽象类原理与用法分析
本文实例讲述了Java 的抽象类原理与用法.分享给大家供大家参考,具体如下: Java 的抽象类 用abstract关键字来修饰一个类时,这个类叫做抽象类: 用abstract来修饰一个方法时,该方法叫做抽象方法. 抽象方法:只有方法的声明,没有方法的实现.以分号结束:abstract int abstractMethod(int a ); 含有抽象方法的类必须被声明为抽象类. 抽象类不能被实例化.抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体.若没有重写全部的抽象方法,
-
Java中同步与并发用法分析
本文较为详细的分析了Java中同步与并发的用法.分享给大家供大家参考.具体分析如下: 1.同步容器类包括两部分:vector和hashtable 另一类是同步包装类,由Collections.synchronizedXXX创建.同步容器对容器的所有状态进行串行访问,从而实现线程安全. 它们存在如下问题: a) 对于符合操作,需要额外的锁保护.比如迭代,缺少则添加等条件运算. b) toString,hashCode,equals都会间接的调用迭代,都需要注意并发. 2.java5.0中的并发
-
Java常用内置注解用法分析
本文实例讲述了Java常用内置注解.分享给大家供大家参考,具体如下: 一 通过@SuppressWarnings关闭警告信息 1 代码 public class ch11_2 { public static void main( String args[] ) { @SuppressWarnings("unused") int a; // A处不会产生编译告警 String bString = "ok"; // B处会产生编译告警 System.out.printl
-
Java线程等待用法实例分析
本文实例讲述了Java线程等待用法.分享给大家供大家参考,具体如下: 线程等待 public class Hello { public static void main(String[] args) { A a = new A(); new Thread(new MyRun(a)).start(); new Thread(new MyRun1(a)).start(); } } class MyRun implements Runnable { private A a; public MyRun(
-
Java线程池用法实战案例分析
本文实例讲述了Java线程池用法.分享给大家供大家参考,具体如下: 一 使用newSingleThreadExecutor创建一个只包含一个线程的线程池 1 代码 import java.util.concurrent.*; public class executorDemo { public static void main( String[] args ) { ExecutorService executor = Executors.newSingleThreadExecutor(); ex
随机推荐
- 关于go语言载入json可能遇到的一个坑
- ASP XMLDom在服务器端操作XML文件的主要方法和实现
- 详解MySQL主从复制实战 - 基于日志点的复制
- 从头开始学代理(新手必读)(转帖) (一梦浮生)
- 学java得这样学,学习确实也得这样
- Oracle 获取表注释和列注释
- 探讨Ajax中同步与异步之间的区别
- JS简单限制textarea内输入字符数量的方法
- 手把手教你搭建ES6的开发运行环境
- IE无法设置短域名下Cookie
- WordPress中限制非管理员用户在文章后只能评论一次
- PHP_MySQL教程-第二天while循环与数据库操作第1/2页
- 不错的dedecms修改实用集锦第1/2页
- jsp连接MySQL操作GIS地图数据实现添加point的功能代码
- JavaScript高级程序设计 学习笔记 js高级技巧
- Mysql select in 按id排序实现方法
- 给初学者的30条PHP最佳实践(荒野无灯)
- JavaScript数组和循环详解
- 简单介绍利用TK在Python下进行GUI编程的教程
- JQuery实现table行折叠效果以JSON做数据源