相关疑难解决方法(0)

Thread.start()和Thread.run()有什么区别?

为什么我们调用start()方法,而方法又调用run()方法?
我们不能直接拨打电话run()吗?

请举例说明存在差异.

java concurrency multithreading

35
推荐指数
2
解决办法
2万
查看次数

为什么我们不能直接调用run()方法?

如果线程的start()方法在内部调用run()方法,那么为什么我们不直接在代码中调用run()方法呢?这样做涉及哪些问题?

multithreading java-me

11
推荐指数
2
解决办法
2万
查看次数

运行和启动线程之间的区别

我不明白启动和运行线程之间的区别,我测试了两种方法并输出了相同的结果,首先我在同一个线程上使用了run()和start的组合,并且它们执行的功能如下:

public class TestRunAndStart implements Runnable {
public void run() {
    System.out.println("running");
}
public static void main(String[] args) {
     Thread t = new Thread(new TestRunAndStart());
     t.run();
     t.run();
     t.start(); 
}
Run Code Online (Sandbox Code Playgroud)

}

输出是:

running
running
running
Run Code Online (Sandbox Code Playgroud)

然后我看到run()方法的javadoc说: If this thread was constructed using a separate Runnable run object, then that Runnable object's run method is called; otherwise, this method does nothing and returns 所以我尝试使用run()方法而没有单独的runnable,如下所示:

public class TestRun extends Thread {
public void run(){
    System.out.println("Running Normal Thread");
}
public static void main(String[]args){
    TestRun …
Run Code Online (Sandbox Code Playgroud)

java multithreading

7
推荐指数
2
解决办法
1万
查看次数

为什么需要Thread.start()?

我工作的主题,当一个问题击中我的mind..If我们可以直接调用run()方法与类的像那么任何普通方法的对象为什么我们需要调用Thread.start()调用的run()方法..我尝试了两种方法,并且两者都得到了相同的结果

首先直接调用run()方法

class Abc extends Thread
{
   public void run()
   {
      for(int i=0;i<5;i++)
      {
         System.out.println("Abc");
      }
      try
      {
          Thread.sleep(100);
      }catch(Exception e)
      {
          System.out.println("Error : "+ e);
      }
   }
}

class Xyz extends Thread
{
    public void run()
    {
       try
       {
           for(int i=0;i<5;i++)
           {
               System.out.println("Xyz");
           }
           Thread.sleep(100);
       }catch(Exception e)
       {
            System.out.println("Error : "+ e);
       }
    }
}

public class ThreadDemo 
{
    public static void main(String[] args) 
    {
        Abc ob=new Abc();
        Xyz oc=new Xyz();
        ob.run();
        oc.run();
    }
}
Run Code Online (Sandbox Code Playgroud)

通过调用Thread.start()进行第二次尝试

public class ThreadDemo …
Run Code Online (Sandbox Code Playgroud)

java multithreading thread-sleep

1
推荐指数
1
解决办法
241
查看次数

Java中的多线程

这是我的代码

public class ThreadLearn{
private static class Check implements Runnable{
    public void run(){

        System.out.printf("\nInCheck %s", Thread.currentThread().getName());
    }
}

public static void main(String[] args){

   Thread t;
   int i=0;
   while(i<2){
      t = new Thread(new GetData());
      t.start();
      System.out.printf("\n%s: ", t.getName());
      i++;
   }

}

}
Run Code Online (Sandbox Code Playgroud)

输出是:

InRun Thread-0
Thread-0:
Thread-1:
InRun Thread-1
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 输出不应该是

    InRun Thread-0

    线程0:

    InRun Thread-1

    线程1:

  2. 一旦t.start()完成,它是否会等待run()执行然后创建第二个线程?如果我想做以下怎么办?

    而(必需)

    new Thread().start();

在我的run方法中,我可以拥有所有我希望线程并行完成的东西,这样它就不会等待一个线程完成run方法然后创建第二个线程.

谢谢

java multithreading

0
推荐指数
1
解决办法
328
查看次数

使用run()而不是线程的start()会发生什么?

厌恶线程类工作正常.我能理解它的过程.然后我改变了

mc.srart()进入mc.run()但没有任何改变,也没有任何错误.

有人可以向我解释一下吗?我们总是可以使用run()而不是start()吗?

public class Main {

    public static void main(String[] args) {

        Myclass mc = new Myclass();
        mc.start();
    }
}

class Myclass extends Thread {
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.print(i + "--");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java multithreading java-threads

0
推荐指数
1
解决办法
108
查看次数