多线程中.start(),方法与.run()方法对比

来源:互联网 发布:淘宝店铺认证复核 编辑:程序博客网 时间:2024/06/07 22:38

又细心的同学会发现我们在开启一个线程的时候调用的是.start()方法。而我们正在写子线程的时候调用的是run()方法。那么start()方法和run()方法又有什么区别呢?在开启一个线程时为什么只能调.start(),不能调.run()方法呢?
run() 不会产生新的栈空间,不会产生子线程 所以都是由主线程来执行 按照顺序执行完毕
start() 会产生新的栈空间, 所以由新的 子线程出现 子线程和主线程 是竞争关系 , 会互相抢占cpu资源 打印结果会有交叉
所以我们开启线程的时候必须调用star();方法

public class Test {    public static void main(String[] args) {        MyThread2 myThread2 = new MyThread2();        myThread2.run();        MyThread2 myThread22 = new MyThread2();        myThread22.run();        for (int i = 0; i < 10; i++) {            System.out.println("主线程"+i);        }    }}class MyThread2 extends Thread{    @Override    public void run() {        for (int i = 0; i < 10; i++) {            System.out.println(Thread.currentThread().getName()+"-->"+i);        }    }}
原创粉丝点击