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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。