我的编程中有三个线程。根据线程概念,所有线程都是异步运行的。因此,每个线程都由处理器随机执行。如果我刚刚通过使用thread.sleep()暂停了一个线程的执行,则另一个线程应该工作。对?? 并且当线程的睡眠时间结束时,它应该再次继续执行。 但是在我的情况下,当我使用t2.sleep(10000)暂停一个线程时,所有其他线程也都被暂停了。但是当t2线程处于等待状态时,它们应该可以正常工作。有人可以告诉我为什么吗?
import java.util.*;
class square extends Thread
{
public int x;
public square(int x)
{
this.x = x;
}
public void run()
{
System.out.println("Square of the number is " + x*x);
}
}
class cube extends Thread
{
public int x;
public cube(int x)
{
this.x = x;
}
public void run()
{
System.out.println("Cube of the number is " + x*x*x);
}
}
class randgen extends Thread
{
public void run()
{
int num=0;
Random r = new Random();
try
{
for(int i=0;i<5;i++)
{
num = r.nextInt(100);
System.out.println("The number generated is " + num);
square t2 = new square(num);
t2.start();
t2.sleep(10000);
cube t3 = new cube(num);
t3.start();
}
}
catch(InterruptedException e)
{
System.out.println(e.getMessage());
}
}
}
public class Main
{
public static void main(String args[])
{
randgen obj = new randgen();
obj.start();
}
}
输出
生成的数字是50
数字的平方是2500
(10秒后) 多维数据集是125000
生成的数字是36
数的平方是1296
(10秒后)
生成的数字是75
多维数据集是46656
数的平方是5625
(10秒后)
生成的数字是92
多维数据集是421875
数的平方是8464
(10秒后)
生成的数字为0
立方数为778688
数字的平方为0 (10秒后)
数字的立方为0
为什么我在10s之后得到输出,而不是线程的概念,我正在暂停的线程只能暂停10s,而其他线程应该同步工作。
答案 0 :(得分:3)
Thread.sleep
是 static 方法。调用t2.sleep(10000)
不会暂停t2,它会暂停当前线程。因此,您实际要做的是开始t2,等待10秒钟,然后开始t3。如果要暂停线程t2,请不要从randgen调用t2.sleep(10000)
,而是从Thread.sleep(10000)
内部调用square.run()
。
public void run()
{
Thread.sleep(10000);
System.out.println("Square of the number is " + x*x);
}
答案 1 :(得分:1)
答案 2 :(得分:1)
square t2 = new square(num);
t2.start();
t2.sleep(10000);
cube t3 = new cube(num);
t3.start();
您睡了10秒钟,然后开始t3
。
尝试将sleep()
放在班级内:
public void run()
{
System.out.println("Square of the number is " + x*x);
sleep(10000);
}