• Thread中的start()方法和自己定义的run()方法有什么区别


    在讲这个问题之前引入一下多线程的小知识吧

    /*/windows系统中的应用程序来做说明 ,例如:扫雷程序,游戏进行的同时,可以同时记录分数,计算时间等. 其实一个应用程序就是一个可执行文件,中包含了一个或者多个进程,一个或者多个进程中包含了一个或者多个线程.

    public class Thread
    extends Object
    implements Runnable

    线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。

    每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。

    当 Java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指定类的 main 方法)。Java 虚拟机会继续执行线程,直到下列任一情况出现时为止:

    • 调用了 Runtime 类的 exit 方法,并且安全管理器允许退出操作发生。
    • 非守护线程的所有线程都已停止运行,无论是通过从对 run 方法的调用中返回,还是通过抛出一个传播到 run 方法之外的异常。

    额...走远了走远了

    直接说吧

    (1)start()方法是来自线程的,真正的实现了多线程的运行,而不用等到run()方法执行完毕之后再执行下面的代码段

    通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。
    然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,
    而CPU再运行其它线程。

    (2)而run()方法只是类中我们自己定义的方法,是一种普通的方法,顺序执行,只有在执行完这一段代码之后才会继续执行下去

    而如果直接用Run方法,这只是调用一个方法而已,程序中依然只有主线程--这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。

     

    下面举了一个小例子

    代码段如下:

     1 public class test_Run {
     2     public static void main(String[] args) {
     3         Runner1 r = new Runner1();
     4         // r.run();//这是方法调用,而不是开启一个线程
     5         Thread t = new Thread(r);// 调用了Thread(Runnable target)方法。且父类对象变量指向子类对象。
     6         t.start();
     7 
     8         for (int i = 0; i < 100; i++) {
     9             System.out.println("进入Main Thread运行状态");
    10             System.out.println(i);
    11         }
    12     }
    13 }
    14 
    15 class Runner1 implements Runnable { // 实现了这个接口,jdk就知道这个类是一个线程
    16     public void run() {
    17 
    18         for (int i = 0; i < 100; i++) {
    19             System.out.println("进入Runner1运行状态");
    20             System.out.println(i);
    21         }
    22     }
    23 }
  • 相关阅读:
    Git 基础教程 之 解决合并冲突
    Git 基础教程 之 远程库更新到本地
    Git 基础教程 之 分支管理及策略
    Git 基础教程 之 从远程库克隆
    Git 基础教程 之 添加远程仓库
    Git 基础教程 之 远程仓库
    c++11新特性1--------------auto
    线程及线程间同步
    进程间通信---信号
    进程间通信---mmap详解(与system V ipc通信对照)
  • 原文地址:https://www.cnblogs.com/wudidamowang666/p/11075514.html
Copyright © 2020-2023  润新知