Java中的sleep()方法是Thread类的一个静态方法,它可以让当前正在执行的线程暂停指定的时间,让出CPU,让其他线程有机会执行;但是sleep()方法不会释放对象锁。
sleep()方法可以使当前正在运行的线程暂停一段时间,这段时间内,该线程不会占用CPU资源;而其他正在就绪态的线程则有机会获得CPU执行权。
sleep()方法可以使当前正在运行的线程进入阻塞态(Blocked State);而其他就绪态的、可运行态的或者无限期地处于休眠态的处于就绪态或者可运行态的处于就绪态或者可运行态的处于就绪态或者可运行态的处于就绪态或者可运行态的处于就绪态或者可运行态。
public static void sleep(long millis) throws InterruptedException { Thread.sleep(millis); }
上面是Thread.sleep()方法实例代码。该方法接收一个long型数字作为参数(单位是ms)。如果该数字大于0则当前正在执行的Thread将休眠millis ms后再重新开始执行。如果该数字为0则当前正在执行Thread将立即释放CPU并重新开始执行。
sleep()方法也有一个重载版本:public static void sleep(long millis, int nanos) throws InterruptedException ;它向上面版本增加了一个int型nanos作为参数。nanos是1/1000 000 000 秒之间隔时间即1ns之间隔时间。如果nanos大于0则当前正在执行Thread将休眠millis ms + nanos ns后再重新开始执行。如果nanos=0则当前正在执行Thread将立即释放CPU并重新开始执行。
sleep()方法也不能保证能够准时暂停特定时间;因为它不能保证具体覆盖特定时间内具体覆盖特定时间内具体覆盖特定时间内具体覆盖特定时间内具体覆盖特定时间内具体覆盖特定时间内具体覆盖特定时间内具体覆盖特定时间内中断、IO 或者 关中断、IO 或者 关中断、IO 或者 关中断、IO 或者 关中断、IO 或者 关中断、IO 或者 关中断、IO 或者 关中断、IO 或者 关中断、IO 或者 关中断、IO 或者 关中断、IO 或者 关中断、IO 或者 关中断、IO 或者 关中断、IO 或者 关interrupts 状态耗电interrupts 状态耗电interrupts 状态耗电interrupts 状态耗电interrupts 状态耗电interrupts 状态耗电interrupts 状态耗电interrupts 状态耗电interrupts 状态耗电interrupts 状态耗电interrupts 状态耗电.
一个语句可以由不同的线程在不同的时间执行。
Thread类静态方法currentThread()返回调用此方法的Thread对象的引用。
考虑下面的语句:
Thread t = Thread.currentThread();
该语句将执行上述语句的线程对象的引用分配给变量t。
下面的代码演示了如何使用currentThread()方法。
两个不同的线程调用CurrentThread类的run()方法中的Thread.currentThread()方法。
该程序只打印正在执行的线程的名称。
public class Main extends Thread { public Main(String name) { super(name); } @Override public void run() { Thread t = Thread.currentThread(); String threadName = t.getName(); System.out.println("Inside run() method: " + threadName); } public static void main(String[] args) { Main ct1 = new Main("First Thread"); Main ct2 = new Main("Second Thread"); ct1.start(); ct2.start(); Thread t = Thread.currentThread(); String threadName = t.getName(); System.out.println("Inside main() method: " + threadName); } }
上面的代码生成以下结果。
当你运行一个类时,JVM启动一个名为main的线程,它负责执行main()方法。
我们可以处理线程中抛出的未捕获异常。
它使用实现java.lang.Thread.UncaughtExceptionHandler接口的类的对象来处理。
接口被定义为Thread类中的嵌套静态接口。
下面的代码显示了一个类,它可以用作线程的未捕获异常处理程序。
class CatchAllThreadExceptionHandler implements Thread.UncaughtExceptionHandler { public void uncaughtException(Thread t, Throwable e) { System.out.println("Caught Exception from Thread:" + t.getName()); } } public class Main { public static void main(String[] args) { CatchAllThreadExceptionHandler handler = new CatchAllThreadExceptionHandler(); // Set an uncaught exception handler for main thread Thread.currentThread().setUncaughtExceptionHandler(handler); // Throw an exception throw new RuntimeException(); } }
上面的代码生成以下结果。
Java线程教程 -Java线程组线程总是线程组的成员。默认情况下,线程的线程组是其创建者线程的组。Java程序中的线程组由java.lang....
Java线程教程 -Java执行器框架提供了一种将任务提交与任务执行分离的方法。java.util.concurrent包中的Executor接口是执行器框架...
Java网络教程 -Java网络UDP多播Java使用MulticastSocket类来创建UDP多播套接字,以接收发送到多播IP地址的数据包。组播套接字基...
JavaFX教程 -JavaFX颜色在JavaFX中,我们可以对对象应用颜色(Paint)。在JavaFX中,所有形状都可以填充简单的颜色和渐变颜色。R...