本篇文章为大家展示了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项目中怎么让线程休眠,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。