sleep方法
# sleep()
当前线程进入休眠,进入“阻塞状态”。
也就是,放弃占有 CPU 时间片,让给其它线程使用。
这行代码出现在哪个线程中,哪个线程就要休眠
参数是 long(8 字节整数) 毫秒数。源代码声明时 static void
Java 所有的整数数据类型都是有符号的,不存在 unsigned 无符号数据类型
例子结合代码理解。 =======
HEAD
当前线程进入休眠,进入“阻塞状态”。
也就是,放弃占有 CPU 时间片,让给其它线程使用。
这行代码出现在哪个线程中,哪个线程就要休眠
参数是 long(8 字节整数) 毫秒数。源代码声明时 static void
Java 所有的整数数据类型都是有符号的,不存在 unsigned 无符号数据类型
例子结合代码理解。 =======
当前线程进入休眠,进入“阻塞状态”。
也就是,放弃占有 CPU 时间片,让给其它线程使用。
这行代码出现在哪个线程中,哪个线程就要休眠
参数是 long(8 字节整数) 毫秒数。源代码声明时 static void
Java 所有的整数数据类型都是有符号的,不存在 unsigned 无符号数据类型
例子结合代码理解。 >>>>>>> 593e4ea (添加了SSM) 有 2 个代码例子展示了不同的功能:
sleep 代码出现在哪个线程中,哪个线程就休眠
直觉上,应该让调用 sleep 方法线程对象休眠才对
但其实线程.sleep(某时间)
等价于Thread.sleep(某时间)
!
这行代码出现在 A 线程中,A 线程就会进入休眠。
这行代码出现在 B 线程中,B 线程就会进入休眠。
一定是让 sleep 代码执行时当前正在执行的线程休眠,也就是与调用 sleep 的线程无关,只与 sleep 代码位置有关
注意静态特性
就算是创建对象,然后"对象."的方式去调,他跟你这个对象也没有关系, 在执行的时候还是会转换成 Thread.sleep()方法去执行,因为 sleep 是静态方法!
对于子类重写的父类的方法,不能比父类的该方法抛出更宽泛更多的异常
class MyRunnable implements Runnable {...}
Runnable 的 run 方法 源代码不存在抛出异常。所以, 在子类 MyRunnable 重写覆盖 父类 Runnable 的 run 方法时 对 run 当中的异常不能抛出,只能 try catch
不过,对子类特有的方法来说,想抛出就可以抛出
比如 MyRunnable 有不是从 Runnable 继承来的方法 B,方法 B 可以抛出异常。在 run 方法里调用方法 B,是完全可以的
线程对象.interrupt(); //干扰,表示一盆冷水过去
使得重写的 run 方法当中,
try {Thread.sleep(某时间)}
被破坏,
进入 catch,抓到(InterruptedException e)
,
执行了e.printStackTrace()
打印出异常信息
如果不想打印出来异常信息,那么只注释就可以
← 调度线程的方法 实现线程的第3种方式→ <<<<<<< HEAD