什么时候用java Thread的sleep方法,怎么判断使用时机?

好像即时使用几个线程有时候不用sleep也能运行···

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

使用几个线程不用sleep()肯定可以运行啊!因为时间片在不停的轮转,你运行一会,我运行一会,轮流运行。。。

不是同步的线程获得锁是随机的而是获得时间片是随机的,synchronized处理锁机制,你好好看看吧!而且当指定优先级或有其他条件影响的时候,其实时间片也相当于不是随机的,必定优先级高的会先运行。追问

怎么理解锁和时间片呢?

追答

锁,顾名思义就是被锁住了呗,呵呵!
还是举例吧!通俗易懂。

就课本上的例子吧!

例一:哲学家进餐问题

有几个哲学家同时进餐,围着一个圆形桌子,每个人左右两边都有一支筷子,而只允许每个人拿自己左边的筷子,那么也就是说每人只有一支筷子,那右边的另一支呢,则被别人拿走了,都想吃饭,且都不愿意放弃自己的筷子!所以每人只有一支,都在等着对方的那一支,就这样,形成了僵持状态,可怜的哲学家被活活的饿死了。。。你说要是哲学家是程序员多好的,知道死锁问题也就不会被饿死了,O(∩_∩)O哈哈~

例二:打电话问题吧

比如只有一个手机,有两个人,都想打电话,那该怎么办呢!也就是说,只能一个个使用呗,在使用的同时就相当上了锁,另一个人就不能用了!而打完电话就相当于释放了锁,另一个人才可以使用。

时间片,其实就是时间段,这个比较抽象,就是在那个时间执行程序。

例子:吃蛋糕

同学过生日,邀请大家聚餐,到了吃蛋糕的时候,刀子不见了,最后好吧,寿星比较豪放就让每人吃上几口,再给其他人吃,比如说隔30秒轮到下一个人吃,则这30秒就相当于时间片!当然在这个过程中,你可以把蛋糕吃完,也可以不吃完,呵呵,看你的胃口和人品了。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-17
多线程异步的时候,当你要完成某个特定的需求的时候,可以用到,具体还要看完成什么功能,比如两个异步A,B,按理A,B是随机同时执行的,我的需求又要我先执行A一段时间,再执行B,这时候就可以SLEEP B一段时间追问

如果我的需求都是同步,那就算多少个线程都不用sleep都行么,同步的线程们获得的锁都是随机的,不会出现内存溢出么?

追答

为什么要纠结SLEEP?不一定线程都要用SLEEP.如果是同步就更不需要SLEEP,同步都确定执行的顺序,你在线程里SLEEP只能改变当前线程,不影响整体执行顺序.比如ABCD ,同一时间内,只能执行A或B或C或D,当其中一个执行完了,再执行下一个.你在ABCD里SLEEP就没有意义了.

Java多线程中join、yield、sleep方法详解
sleep方法,静态本地方法,调用底层C库实现睡眠。接收毫秒参数,让当前线程睡眠指定时间。睡眠期间,线程不会释放锁。会抛出InterruptedException异常。示例代码显示,多个运行结果可能不同,但始终一个线程运行完全后另一个开始。yield方法,向调度器表示愿意让出CPU执行权,但调度器可能忽略此请求。适用于在多...

关于java中线程(Thread)问题?
1.sleep()使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是如果有Synchronized同步块,其他线程仍然不同访问共享数据。注意该方法要捕获异常 比如有两个线程同时执行(没有Synchronized),一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果...

java中sleep方法和wait方法的区别是什么?
具体来说,wait 和 sleep 的主要区别在于以下几点:首先,wait 方法是对象的一个同步方法,用于线程间通信,让线程等待特定对象的信号。它通常与 synchronized 关键字结合使用,确保线程安全。另一方面,sleep 方法是 Thread 类的一个静态方法,它使线程暂停指定的时间,适用于控制线程的执行顺序。它们的主要...

【冷知识】Thread.sleep 靠谱吗?
实验一:暂停1ms 在Android模拟器(x86)与真机上运行实验,发现实际睡眠时间落在了期望值附近,但并非完全精确。实验二:暂停100ms 同样在Android模拟器与真机上执行此实验,观察到结果与实验一类似,实际睡眠时间与期望值存在一定偏差。结论 Java中的Thread.sleep方法在高精度要求下,其睡眠时间并非完全可靠...

java线程休眠之sleep
睡眠方法是Thread类中的静态方法,当线程调用sleep方法时,线程会暂停指定时间,不参与CPU调度,但持有的监视器资源保持不变。时间结束后,线程恢复就绪状态,等待调度。实例显示,线程在睡眠时未释放监视器锁,导致另一线程无法获取。此现象揭示睡眠过程中对锁的管理。若睡眠线程被中断,会抛出...

Thread.sleep的副作用
很多Java程序员倾向于使用Thread.sleep方法来实现线程的定时睡眠,从而避免while循环中CPU资源的大量消耗。然而,Thread.sleep的执行并非零成本。如果循环中的睡眠时间过短,开销会非常大。Thread.sleep的主要成本来源于线程切换。当代码执行到Thread.sleep时,当前线程会进入time_wait状态,即所谓的睡眠状态。

sleep()函数怎么具体在c语言中怎么用?
Sleep方法是Java线程(Thread)开发中一种概念。是线程TIMED_WAITING状态中的一种方法。使用方法为:1、类名为创建线程的类名。2、Thread线程Sleep方法的示例代码如下图所示。让main方法运行过程中休眠5000毫秒。3、Thread线程Sleep方法的示例代码执行结果如下图所示。4、millis参数含义:以毫秒为单位的睡眠...

java中thread.sleep是什么意思
sleep()方法是Thread类里面的,主要的意义就是让当前线程停止执行,让出cpu给其他的线程,但是不会释放对象锁资源以及监控的状态,当指定的时间到了之后又会自动恢复运行状态。wait()方法是Object类里面的,主要的意义就是让线程放弃当前的对象的锁,进入等待此对象的等待锁定池,只有针对此对象调动notify...

bat如何增加等待时间
1、使用Thread.sleep方法:这是一种比较简单的方法,在Java中使用Thread.sleep方法可以让线程暂停一段时间。例如,可以使用Thread.sleep(1000)让线程暂停1秒钟,以此增加等待时间。2、使用随机数生成器:可以使用随机数生成器来生成随机的等待时间。例如,可以使用Java中的Math.random()函数生成0到1之间的...

【揭秘】sleep()、wait()、park()三种休眠方式的终极对比
Java中的线程休眠方式主要有三种:Thread.sleep()、Object.wait()和LockSupport.park()。每种方法都有其独特之处和适用场景。首先,Thread.sleep()方法简单易用,线程在指定的毫秒内进入休眠,不执行任何操作,也不会释放锁,可能导致死锁。在持有锁的情况下使用时需格外小心。Object.wait()方法则需在...

相似回答