Java项目中怎么让线程休眠

  介绍

本篇文章为大家展示了Java项目中怎么让线程休眠,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

睡眠()定义在Thread.java中。

睡眠()的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”.sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间,在线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,从而等待cpu的调度执行只

下面通过一个简单示例演示睡眠()的用法只

//SleepTest.java的源码
  类ThreadA扩展线程{
  公共ThreadA(字符串名称){
  超级(名称);
  }
  公共同步空白run () {
  尝试{
  for (int i=0;我& lt; 10;我+ +){
  System.out.printf (“% s: % d \ n", this.getName (), i);//我能被4整除时,休眠100毫秒
  如果(我% 4==0)
  thread . sleep ();
  }
  }捕捉(InterruptedException e) {
  e.printStackTrace ();
  }
  }
  }
  公开课SleepTest {
  公共静态void main (String [] args) {
  ThreadA t1=new ThreadA (“t1");
  t.start ();
  }
  }

运行结果:,

t1: 0
t1: 1
t1: 2
t1: 3
t1: 4
t1: 5
t1: 6
t1: 7
t1: 8
t1: 9

结果说明:

程序比较简单,在主线程主要中启动线程t1.t1启动之后,当t1中的计算我能被4整除时,t1会通过thread . sleep(100)休眠100毫秒只


我们知道,等()的作用是让当前线程由“运行状态”进入”等待(阻塞)状态”的同时,也会释放同步锁。而睡()的作用是也是让当前线程由“运行状态”进入到“休眠(阻塞)状态”。

但是,等待()会释放对象的同步锁,而睡眠()则不会释放锁。

下面通过示例演示睡眠()是不会释放锁的只

//SleepLockTest.java的源码
  公开课SleepLockTest {
  私有静态对象obj=新对象();
  公共静态void main (String [] args) {
  ThreadA t1=new ThreadA (“t1");
  ThreadA t2=new ThreadA (“t2");
  t1.start ();
  t2.start ();
  }
  静态类ThreadA延伸线{
  公共ThreadA(字符串名称){
  超级(名称);
  }
  公共空间run () {//获取obj对象的同步锁
  同步(obj) {
  尝试{
  for (int i=0;我& lt; 10;我+ +){
  System.out.printf (“% s: % d \ n", this.getName (), i);//我能被4整除时,休眠100毫秒
  如果(我% 4==0)
  thread . sleep (100);
  }
  }捕捉(InterruptedException e) {
  e.printStackTrace ();
  }
  }
  }
  }
  }

运行结果:

t1: 0
t1: 1
t1: 2
t1: 3
t1: 4
t1: 5
t1: 6
t1: 7
t1: 8
t1: 9
t2: 0
t2: 1
t2: 2
t2: 3
t2: 4
t2: 5
t2: 6
t2: 7
t2: 8
t2: 9

结果说明:

主线程主要中启动了两个线程t1和t2.t1和t2在运行()会引用同一个对象的同步锁,即同步(obj)。在t1运行过程中,虽然它会调用thread . sleep(100);但是,t2是不会获取cpu执行权的,因为,t1并没有释放“obj所持有的同步锁”!

注意,若我们注释掉同步(obj)后再次执行该程序,t1和t2是可以相互切换的。下面是注释调同步(obj)之后的源码:,

//SleepLockTest.java的源码(注释掉同步(obj))
  公开课SleepLockTest {
  私有静态对象obj=新对象();
  公共静态void main (String [] args) {
  ThreadA t1=new ThreadA (“t1");
  ThreadA t2=new ThreadA (“t2");
  t.start ();
  t.start ();
  }
  静态类ThreadA延伸线{
  公共ThreadA(字符串名称){
  超级(名称);
  }
  公共空间run () {//获取obj对象的同步锁//同步(obj) {
  尝试{
  for (int i=0;我& lt; 10;我+ +){
  System.out.printf (“% s: % d \ n", this.getName (), i);//我能被4整除时,休眠100毫秒
  如果(我% 4==0)
  thread . sleep (100);
  }
  }捕捉(InterruptedException e) {
  e.printStackTrace ();
  }//}
  }
  }
  }

上述内容就是Java项目中怎么让线程休眠,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

Java项目中怎么让线程休眠