Java 在多线程处理中,当我暂停一个线程执行时,为什么其他线程不工作

Java 在多线程处理中,当我暂停一个线程执行时,为什么其他线程不工作,java,multithreading,extends,Java,Multithreading,Extends,我的编程中有三个线程。根据线程概念,所有线程都是异步运行的。因此,每个线程都是由处理器随机执行的。如果我刚刚使用thread.sleep()暂停了一个线程的执行,那么另一个线程应该可以工作。正确的?? 当线程的睡眠时间结束时,它应该再次继续执行。 但在我的例子中,当我使用t2.sleep(10000)暂停一个线程时,所有其他线程也会暂停。但是在t2线程等待时,它们应该正常工作。有人能告诉我为什么会这样吗 import java.util.*; class square exten

我的编程中有三个线程。根据线程概念,所有线程都是异步运行的。因此,每个线程都是由处理器随机执行的。如果我刚刚使用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();

    }
}
import java.util.*;
类正方形延伸螺纹
{
公共int x;
公共广场(int x)
{
这个.x=x;
}
公开募捐
{
System.out.println(“数字的平方为”+x*x);
}
}
类多维数据集扩展线程
{
公共int x;
公共多维数据集(INTX)
{
这个.x=x;
}
公开募捐
{
System.out.println(“数字的立方体是”+x*x*x);
}
}
类randgen扩展了线程
{
公开募捐
{
int num=0;
随机r=新随机();
尝试
{

for(int i=0;i,因为您正在从主线程调用
t2.sleep(10000);
,这会导致它睡眠(即使您使用t2访问它)

你也可以看到答案


默认情况下,您不能强制其他线程睡眠。

因为您正在从主线程调用
t2.sleep(10000);
,这会导致它睡眠(即使您使用t2访问它)

square t2 = new square(num);
t2.start();
t2.sleep(10000);
cube t3 = new cube(num);
t3.start();
你也可以看到答案

默认情况下,不能强制其他线程睡眠

square t2 = new square(num);
t2.start();
t2.sleep(10000);
cube t3 = new cube(num);
t3.start();
在开始
t3
之前,您正在睡眠10秒钟

尝试将
sleep()
放入类中:

public void run()
{
    System.out.println("Square of the number is " + x*x);
    sleep(10000);
}
在开始
t3
之前,您正在睡眠10秒钟

尝试将
sleep()
放入类中:

public void run()
{
    System.out.println("Square of the number is " + x*x);
    sleep(10000);
}

Thread.sleep
是一种静态方法。调用
t2.sleep(10000)
不会暂停t2,而是暂停当前线程。因此,您实际要做的是启动t2,等待10秒,然后启动t3。如果您想暂停线程t2,不要从randgen调用
t2.sleep(10000)
,而是调用
Thread.sleep(10000)
从内部
square.run()


Thread.sleep
是一种静态方法。调用
t2.sleep(10000)
不会暂停t2,而是暂停当前线程。因此,您实际要做的是启动t2,等待10秒,然后启动t3。如果您想暂停线程t2,不要从randgen调用
t2.sleep(10000)
,而是调用
Thread.sleep(10000)
从内部
square.run()


在启动多维数据集线程之前,您需要睡眠10秒。为什么它会在10秒结束之前运行?您没有睡眠
t2
。@JB Nizet yaa这是我的点多维数据集线程在10秒之前不应该工作,但我可以看到其他线程在10秒之前不工作。为什么?它们是,因为它们会立即打印结果。阅读我们的输出:在您启动方形线程后会立即打印,立方体只会在10秒后显示,因为您是在10秒后启动立方体线程的。在启动立方体线程之前,您会睡眠10秒。为什么在10秒结束之前它会运行?您不会睡眠
t2
,@JB Nizet yaa这是我的点立方体thread在10秒之前不应该工作,但我能看到的是其他线程在10秒之前不工作。为什么?它们是,因为它们会立即打印结果。阅读我们的输出:在您启动方形线程后立即打印,而立方体只在10秒后出现,因为您在10秒后启动立方体线程。他想这将使t2休眠,而不是当前线程。这在语法上是有意义的。他认为这将使t2休眠,而不是当前线程。这在语法上是有意义的