2015-03-19 3 views
0

При написании программы с использованием multi threading у нас был метод, содержащий метод run в разных потоках. Они использовали thread.start вместо thread.run. Может ли кто-нибудь объяснить, в чем причина отказа от метода по имени?Метод вызова в java с использованием многопоточности

+1

Это не ответ на ваш вопрос, но я хотел бы предложить вам управлять потоками с 'Executors' https: // docs.oracle.com/javase/tutorial/essential/concurrency/executors.html – Radek

+0

Здесь, на наш взгляд, ответили: [http://stackoverflow.com/questions/8579657/java-whats-the-difference- между-поточно-пуско-работоспособная перспектива] (http://stackoverflow.com/questions/8579657/java-wha TS-разностный-между-нить-пуско-работоспособная перспектива) –

ответ

0

Метод Thread.run() будет выполнять метод в текущем или основном потоке. Принимая во внимание, что метод Thread.start() будет выполнять логику в отдельном потоке.

Дополнительная информация What's the difference between Thread start() and Runnable run()

0

При вызове метода Run() непосредственно на классе, он будет выполнять код в основном потоке. Когда вы используете метод Thread.start(), создается новый поток. Затем JVM вызывает ваш метод run(), когда поток разрешен для запуска.

Посмотрите на Oracle documentation.

0

Thread.start() создает новый поток и вызывает работоспособной параллельно, где, как Thread.run() работает, как только метод call.ie, не создается поток, поэтому мы в основном используем Thread.start()

0
  1. Thread.startсоздаст новый поток из текущего работающего кода и вызоваThread.run функции.
  2. Thread.run вызовет метод run этого класса, не создавая новую тему.

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

Смежные вопросы