微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

线程中的run方法和start方法的区别


start:启动线程,真正实现了多线程       异步进行              不可以重复调用(会报错)
run:  只是个普通方法                 同步进行                     可以重复调用
例子:
class MyThread extends Thread{  
        public void run(){
            ...
        } 
    };
    MyThread mythread = new MyThread();
mythread.start()会启动一个新线程,并在新线程中运行run()方法
而mythread.run()则会直接在当前线程中运行run()方法,并不会启动一个新线程来运行run()。
通过一个简单示例演示它们之间的区别:

  // Demo.java 的源码
    class MyThread extends Thread{  
        public MyThread(String name) {
            super(name);
        }
     
        public void run(){
            System.out.println(Thread.currentThread().getName()+" is running");
        } 
    }; 
     
    public class Demo {  
        public static void main(String[] args) {  
            Thread mythread=new MyThread("mythread");
     
            System.out.println(Thread.currentThread().getName()+" call mythread.run()");
            mythread.run();
     
            System.out.println(Thread.currentThread().getName()+" call mythread.start()");
            mythread.start();
        }  
    }
  main call mythread.run()
    main is running
    main call mythread.start()
    mythread is running

结果说明:

(01) Thread.currentThread().getName()是用于获取“当前线程”的名字。当前线程是指正在cpu中调度执行的线程。

(02) mythread.run()是在“主线程main”中调用的,该run()方法直接运行在“主线程main”上。

(03) mythread.start()会启动“线程mythread”,“线程mythread”启动之后,会调用run()方法;此时的run()方法是运行在“线程mythread”上。
 

原文地址:https://www.jb51.cc/wenti/3284510.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐