使用多线程在java中调用的方法

时间:2015-03-19 14:58:34

标签: java multithreading

在使用multi threading编写程序时,我们在不同的线程中有一个包含run方法的方法。他们使用thread.start代替thread.run。有人可以解释一下,没有按名称调用方法的原因是什么?

4 个答案:

答案 0 :(得分:0)

Thread.run()方法将在当前主线程或主线程中执行该方法。 而Thread.start()方法将在一个单独的线程中执行逻辑。

更多信息 What's the difference between Thread start() and Runnable run()

答案 1 :(得分:0)

如果直接在类上调用run()方法,它将执行主线程中的代码。使用Thread.start()方法时,将创建一个新线程。然后,当允许线程运行时,JVM会调用run()方法。

请查看Oracle documentation

答案 2 :(得分:0)

Thread.start()创建一个新线程并并行调用runnable,而Thread.run()只是一个方法调用。没有线程创建,所以我们主要使用Thread.start()

答案 3 :(得分:0)

  1. Thread.start 将根据当前正在运行的代码和调用 Thread.run函数创建新主题
  2. Thread.run会调用此类的run方法,而无需创建新主题。
  3. Thread.java:

    public synchronized void start() {
        /**
         * This method is not invoked for the main method thread or "system"
         * group threads created/set up by the VM. Any new functionality added
         * to this method in the future may have to also be added to the VM.
         *
         * A zero status value corresponds to state "NEW".
         */
        if (threadStatus != 0 || this != me)
            throw new IllegalThreadStateException();
        group.add(this);
        start0();
        if (stopBeforeStart) {
            stop0(throwableFromStop);
        }
    }
    public void run() {
        if (target != null) {
            target.run();
        }
    }
    

    JDK Thread课程:http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/5672a2be515a/src/share/classes/java/lang/Thread.java