zoukankan      html  css  js  c++  java
  • Java基础加强之并发(三)Thread中start()和run()的区别

    Thread中start()和run()的区别

    start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。
    run()   : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程!

    MyThreadTest.java代码

    class MyThread extends Thread{
        public void run() {
            System.out.println("线程名:"+Thread.currentThread().getName());
        }
    }
    
    public class MyThreadTest {
    
        public static void main(String[] args) {
            MyThread mythread = new MyThread();
            mythread.start();//运行结果:线程名:Thread-0
            mythread.run();//运行结果:线程名:main
        }
    
    }

    结果说明
    (01) Thread.currentThread().getName()是用于获取“当前线程”的名字。当前线程是指正在cpu中调度执行的线程。
    (02) mythread.run()是在“主线程main”中调用的,该run()方法直接运行在“主线程main”上。
    (03) mythread.start()会启动“线程mythread”,“线程mythread”启动之后,会调用run()方法;此时的run()方法是运行在“线程mythread”上。

    Thread类中start()方法源码

    public synchronized void start() {
        // 如果线程不是"就绪状态",则抛出异常!
        if (threadStatus != 0)
            throw new IllegalThreadStateException();
    
        // 将线程添加到ThreadGroup中
        group.add(this);
    
        boolean started = false;
        try {
            // 通过start0()启动线程
            start0();
            // 设置started标记
            started = true;
        } finally {
            try {
                if (!started) {
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {
            }
        }
    }

    说明:start()实际上是通过本地方法start0()启动线程的。而start0()会新运行一个线程,新线程会调用run()方法。

    Thread类中run源码

    private Runnable target;
    public
    void run() { if (target != null) { target.run(); } }

    说明:target是一个Runnable对象。run()就是直接调用Thread线程的Runnable成员的run()方法,并不会新建一个线程。

  • 相关阅读:
    loadrunne-- Analysis 分析器
    Fiddler抓包工具详细介绍
    在 Windows 10 x64 上安装及使用 ab 工具的流程
    Ab工具基本使用
    ab压测返回结果解析
    VMware Workstation 14 Pro永久激活密钥
    通用接口测试用例设计
    线段树の二 区间乘+区间加
    线段树の一 区间和
    C++位运算
  • 原文地址:https://www.cnblogs.com/qingyunzong/p/8483314.html
Copyright © 2011-2022 走看看