当遇到调用[sleep][1]();
时正在执行线程,然后线程立即进入休眠状态
其中[yield][2]();
线程进入可运行状态/就绪状态
答案 0 :(得分:124)
我们可以通过使用Thread类的3种方法中的任何一种来阻止线程执行:
yield()
join()
sleep()
yield()
方法暂时暂停当前正在执行的线程,以便有机会执行相同优先级的剩余等待线程。如果没有等待线程或所有等待线程的优先级较低,则同一线程将继续执行。产生执行机会的屈服线程由线程调度程序决定,其行为依赖于供应商。
join()
如果任何执行线程t1在t2上调用join()
,即; t2.join()
立即t1将进入等待状态,直到t2完成执行。
sleep()
根据我们的要求,我们可以使一个线程处于睡眠状态达指定的时间段(希望我们最喜欢的方法不需要太多解释)。
答案 1 :(得分:89)
sleep()
导致线程在给定的时间内明确停止执行;如果不需要运行其他线程或进程,CPU将处于空闲状态(可能进入省电模式)。
yield()
基本上意味着线程没有做任何特别重要的事情,如果需要运行任何其他线程或进程,它们应该。否则,当前线程将继续运行。
答案 2 :(得分:29)
答案 3 :(得分:5)
Yield:将使线程等待当前正在执行的线程,并且调用yield()的线程将在线程执行结束时附加自身。调用yield()的线程将处于阻塞状态直到轮到它。
睡眠:将使线程在休眠模式下休眠一段时间内参数中提到的时间。
加入:t1和t2是两个线程,调用t2.join()然后t1进入等待状态,直到t2完成执行。然后t1将进入可运行状态,然后我们的专业JVM线程调度程序将根据标准选择t1。
答案 4 :(得分:4)
Sleep导致线程暂停自身x毫秒,而yield暂停线程并立即将其移动到就绪队列(CPU用来运行线程的队列)。
答案 5 :(得分:2)
Yield():方法将停止当前正在执行的线程,并为另一个正在队列中等待优先级相同的线程提供机会。如果没有线程,则当前线程将继续执行。 CPU永远不会处于理想状态。
Sleep():方法将在特定时间停止线程(时间将以毫秒为单位)。如果这是一个正在运行的单线程,则 CPU在该时间段将处于理想状态。
都是静态的。
答案 6 :(得分:1)
收益:这是调度程序的一个提示(不保证),您已经做了足够的事情,并且其他一些具有相同优先级的线程可能会运行并使用CPU。
Thread.sleep();
睡眠:它会在给定时间内阻止该特定线程的执行。
TimeUnit.MILLISECONDS.sleep(1000);
答案 7 :(得分:0)
sleep()会导致线程在给定的时间内明确停止执行;如果不需要运行其他线程或进程,CPU将处于空闲状态(可能进入省电模式)。 yield()基本上意味着线程没有做任何特别重要的事情,如果需要运行任何其他线程或进程,它们应该。否则,当前线程将继续运行。
答案 8 :(得分:0)
请求当前线程放弃CPU以便其他线程有机会执行的一种方法是在Java中使用yield
。
yield
是一种静态方法。
它没有说哪个其他线程会获得CPU。
同一个线程可以返回CPU并再次开始执行。
public class Solution9 {
public static void main(String[] args) {
yclass yy = new yclass ();
Thread t1= new Thread(yy);
t1.start();
for (int i = 0; i <3; i++) {
Thread.yield();
System.out.println("during yield control => " + Thread.currentThread().getName());
}
}
}
class yclass implements Runnable{
@Override
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println("control => " + Thread.currentThread().getName());
}
}
}
答案 9 :(得分:0)
yield():yield方法用于暂停当前正在运行的进程的执行,以便具有相同优先级的其他等待线程将使CPU执行。具有较低优先级的线程将不会在yield上执行。如果没有等待线程,那么该线程将开始执行。
join():join方法停止当前正在执行的线程并等待另一个完成,在调用join方法之后,它将恢复自己的执行。
有关详细说明,请参阅this link。
答案 10 :(得分:0)
const Discord = require('discord.js');
module.exports = {
name: 'user',
description: 'Get your or someone else\'s user info',
aliases: ['u',],
cooldown: 2,
execute(message) {
if (!message.mentions.users.size) {
const embed = new Discord.MessageEmbed()
.setTitle(message.author.username)
.addField('Created',message.author.createdAt)
.addField('ID',message.author.id)
.addField('Nickname',message.author.nickname, true)
.addField("Status",`${ message.author.presence.status}`, true)
.addField('Joined current server on', message.member.joinedAt)
.addField('Currently in', message.guild.name)
.addField('Roles', `<@&${message.guild.member(message.author)._roles.join('> <@&')}>`, true)
.addField('Permissions',`${message.author.permissions}` )
.addField('Status',message.author.presence.status)
.setColor(0x00ffff)
.setThumbnail(message.author.displayAvatarURL({ format: 'png' }))
.setFooter(`Requested By:${message.author.username}`)
.setTimestamp();
return message.channel.send(embed);
导致线程在给定的时间内肯定停止执行;如果不需要运行其他线程或进程,则CPU将处于空闲状态(并可能进入省电模式)。
sleep()
基本上意味着线程没有做任何特别重要的事情,如果需要运行任何其他线程或进程,则应该这样做。否则,当前线程将继续运行。
答案 11 :(得分:0)
两个方法都用于阻止线程执行。 但具体来说, 睡觉(): 目的:如果一个线程不想在特定的时间内执行任何操作,那么我们应该去sleep()。fore.x。幻灯片放映。 让(): 目的:如果一个线程想要暂停它的执行,以给另一个等待优先级相同的线程提供执行机会。需要更多执行时间的线程应在执行之间调用yield()。
注意:某些平台可能未提供对yield()的适当支持。因为底层系统可能不提供对抢先式调度的支持。而且yield()是本机方法。