gpt4 book ai didi

java - sleep() 方法如何在给定线程和输出上工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:40 25 4
gpt4 key购买 nike

据我所知,sleep() 用于让线程 hibernate 指定时间。我做了两个示例 - 在示例 1 中,我得到的输出为 1,2, 3,4 因为我只创造了一个。在示例 2 中,我创建了线程的 2 个实例,并得到输出 1,1,2,2,3,3,4,4

为什么第一个线程的输出不是 1234,然后是 1,2,3,4 是第二个吗?

示例 1:

// Using sleep() method
public class Aaa extends Thread{
public void run(){
for(int i=1;i<5;i++){
try{
Thread.sleep(500);
} catch(InterruptedException e){
System.out.println(e);
}
System.out.println(i);
}
}
public static void main(String[] args){
Aaa m1=new Aaa();
m1.start();
}
}

Output:
1
2
3
4

示例 2:

    // Using sleep() method
public class Aaa extends Thread{
public void run(){
for(int i=1;i<5;i++){
try{
Thread.sleep(500); // sleeps thread
} catch(InterruptedException e){
System.out.println(e);
}
System.out.println(i);
}
}
public static void main(String[] args){
Aaa m1=new Aaa(); // creating one object
Aaa m2=new Aaa(); // creating second object of a class
m1.start(); // calls run method
m2.start();
}
}


Output:
1
1
2
2
3
3
4
4

最佳答案

您已经创建了两个 Runnable 对象。如果你通过调用它们的 run 方法来运行它们,你会得到你想象的结果:

   Aaa m1=new Aaa(); // creating one object
Aaa m2=new Aaa(); // creating second object of a class
System.out.println("Calling m1.run()");
m1.run(); // we call run method
System.out.println("Calling m2.run()");
m2.run();

输出

Calling m1.run()
1
2
3
4
Calling m2.run()
1
2
3
4

因为方法执行了两次,一个接一个。

请注意,调用Runnable/Threadrun 方法不是运行线程的正常方法。您通常会使用 start 方法。

但是,如果您将每个都放在一个Thread 中并启动 它们:

   Aaa m1=new Aaa(); // creating one object
Aaa m2=new Aaa(); // creating second object of a class
System.out.println("Calling m1.start()");
m1.start(); // thread calls run method
System.out.println("Calling m2.start()");
m2.start();

现在每个对象都在自己的线程中并行运行,因此输出是交错的:

Calling m1.start()
Calling m2.start()
1 < From thread 1
1 < From thread 2
2 ...
2
3
3
4
4

顺序显然会因线程交错方式而异。

可能会让您感到困惑的一件事是您选择了extend Thread。这是气馁。最好是 implement Runnable - 像这样:

public class Aaa implements Runnable {
public void run() {
for (int i = 1; i < 5; i++) {
try {
Thread.sleep(500); // sleeps thread
} catch (InterruptedException e) {
System.out.println(e);
}
System.out.println(i);
}
}

public static void main(String[] args) {
Aaa m1 = new Aaa(); // creating one object
Thread t1 = new Thread(m1); // Its thread
Aaa m2 = new Aaa(); // creating second object of a class
Thread t2 = new Thread(m2); // Its thread
t1.start(); // calls m's run method in a new thread.
t2.start();
}

}

现在更清楚您的对象在两个不同的线程中运行,因此并行运行。

关于java - sleep() 方法如何在给定线程和输出上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19092556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com