knrt.net
当前位置:首页 >> jAvA,mAin方法中的主线程,想让它自身调用slEEp方法,不知可否? >>

jAvA,mAin方法中的主线程,想让它自身调用slEEp方法,不知可否?

sleep是static方法,使调用线程进入睡眠r1.sleep的用法严格讲是错的用thread.sleep

你好!java的线程里面,sleep()和wait()这2个方法都可以睡眠当前线程而去执行别的线程,但是sleep()当时间满了会自动恢复线程的运行,但是wait()这个方法要用notify()方法去唤醒它.如有疑问,请追问.

new Thread(){ public void run(){ while(true) { try{ //你要做的事情,1000是每一秒循环一次 Thread.sleep(1000); } catch (Exception e) { } } } }.start();

sleep是thread的方法 所以在用sleep方法是这样用的thread.sleep(时间); 代表的是当前的线程休眠

sleep(毫秒数)是Thread类的静态方法.使用时:Thread.sleep(毫秒数);如Thread.sleep(1000);该线程睡眠1秒钟,之间此线程什么都不做.等1秒钟之后,继续余下代码执行.不过线程是没有保证的.也许1秒钟之后,该线程没有转为可运行状态,也是可能的.

应该可以用notify()来唤醒吧!!

同步,异步是建立在共享数据的基础上的,跟线程是不同的概念,但是又相互联系.联系的地方在于数据操作上:例如:数字 int num =1;线程1:在对num做+1的操作 线程2:也在对num做+1的操作 如果:在单位时间内,线程1,2没有先后顺序的进行+1运算,那么这就是异步.反之,线程1做,线程2不做,线程2做,线程1不做,那么就是同步.你上面操作只有一个线程,因为main做为主线程,在一般情况下,在java里是不做多线程考虑的,java中的线程指的是Thread或接口Runable.其实上你只有一个t1线程而已

sleep(1000),是把当前线程睡眠1000ms,1000ms之后,有cpu的时间片控制分配,轮到你这个线程运行,你才能运行;由于cpu运行速度特别快,所以我们看起来好像是1000ms之后就立马运行了,但很多情况都是大于1000ms的

第一个问题:线程有几个状态1,就绪状态,2.运行状态 3.休眠状态,4.死亡状态,线程A执行时遇到sleep指令:进入休眠状态,立即停下来sleep指定时间到了,线程A回到就绪状态,但是不一定B马上停下把内存让给A!!!!有可能B继续执行,也有可能执行A.原因:cpu执行哪个线程是不确定的,只要线程处于就绪状态,cpu会随机执行就绪状态的线程.第二个问题:线程要执行的内容在run()方法中,这个跟main()方法没关系,一般main()只负责启动线程,所以main()方法执行完后,只要A执行完sleep(),回到就绪状态,就会继续执行

sleep()方法是属于线程本身的,直接调用Thread.sleep(毫秒数)就可以使用sleep()主要是让当前线程进入休眠状态,不会释放锁,把时间片让给其他线程,等休眠时间结束,再继续执行.这里的再继续执行不是立马执行,也许并发时候,某一个线程优先级比较高,那么即使是休眠结束也不会执行,还得优先级高的先执行.

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.knrt.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com