Java创建线程之后,直接调用start()方法和run()的区别,java多线程run和start方法的区别

  Java创建线程之后,直接调用start()方法和run()的区别,java多线程run和start方法的区别

  如何解决写爬虫IP受阻的问题?立即使用。

  区别如下:

  我们知道Java中的线程是通过Java.lang.Thread实现的,所以我们可以通过实例化Thread的一个对象来创建一个线程,然后调用start()来启动它。但是Thread run()的一个特定方法也可以启动线程,那么这两个方法有什么区别呢?

  线程状态

  在Java中,线程通常有五种状态:创建、运行、阻塞、等待和终止。

  新的

  运行状态,(运行中,就绪(等待cpu时间片))

  阻塞-阻塞状态,

  等待-等待状态,没有明确的等待结束时间,调用wait()

  TIMED_WAITING—等待时间确定的超时等待状态,如sleep(xxx)

  终止-多线程终止状态的原理:

  一般我们用thread new来启动一个线程,然后调用start方法来启动,线程就会处于运行状态。就绪,等待CPU调度,然后在线程中执行run()方法。使用start方法真正实现了多线程运行,因为这个时候,我们可以继续执行下面的代码,而不需要等待我们的run方法结束,这就是所谓的多线程。

  如果直接用thread执行run方法会怎么样?

  因为run方法是thread中的一个普通方法,如果直接调用run()方法,这个时候就会在主线程中运行,因为程序中主线程只有一个线程。如果有两个线程,都是直接调用run()方法,那么它们的执行顺序一定是顺序的,没有达到多线程的目的。

  学习免费视频分享:java视频教程

  代码比较

  公共类ThreadDemo5 {

  public static final布尔标志=false

  公共静态void main(String[] args) {

  线程t1=新线程(新Runnable() {

  @覆盖

  公共无效运行(){

  system . out . println(thread . current thread()。getName());

  }

  });

  t1 . start();

  }

  }调用start()方法,线程名是默认的

  公共类ThreadDemo5 {

  public static final布尔标志=false

  公共静态void main(String[] args) {

  线程t1=新线程(新Runnable() {

  @覆盖

  公共无效运行(){

  system . out . println(thread . current thread()。getName());

  }

  });

  t1 . run();

  }

  }调用run(),线程名为main

  推荐:java入门教程以上是java线程中start方法和run方法区别的细节。请多关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: