@黄亿华 你好,想跟你请教个问题:webmaigc中的Spider设计的时候impliments Runnable ,为什么在使用的时候,也就是main方法中却调用的run()方法,能不能不impliments Runnable。希望你能够在百忙之中抽出一点时间替我解答疑惑,谢谢啦!
所以我就有疑问呀,Sipder在调用的时候使用的是run而不是start
@刘小宸 调用run的不应该是你,而是JVM里面的C++代码,这是个系统内的回调。就好比 菜单是给厨房厨师看的,它来处理菜单,你只需要给菜单上写你要什么菜,然后叫一下服务员,叫服务员就好比start,开始给你做菜这个业务。菜单是你写的,你只需要等待底层(厨师)执行完你要做的事儿就成。要是还不懂,建议你先理解一下什么是回调方法,真心的。
你看过 start和run方法的源码吗?run方法仅仅是一个普通的方法,你调用这个方法就和普通方法调用无异;而start方法内部将当前线程加入一个线程组表示该线程获得启动权的,然后调用了一个start0方法,这个方法是native的是底层c语言调用的,用来回调run方法。所以run方法不是给用户调用的,而是给系统调用的,用户只需要在run中定义好要做的事,系统不管你要做什么 他只管执行run
这个是线程的特点
1) start: 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。 ...
回复那这就是说直接调用run就不是多线程啦!
@刘小宸 差不多吧
其实我想说既然是 implements Runnable,,为何main方法不是使用start()方法,而是run()方法@黄亿华@ccc_clk
其实他想说既然是 implements Runnable,,为何main方法不是使用start()方法,而是run()方法
用Runnable,只是用这个强调入口在这里而已。你的疑惑是什么?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(10)
所以我就有疑问呀,Sipder在调用的时候使用的是run而不是start
@刘小宸 调用run的不应该是你,而是JVM里面的C++代码,这是个系统内的回调。就好比 菜单是给厨房厨师看的,它来处理菜单,你只需要给菜单上写你要什么菜,然后叫一下服务员,叫服务员就好比start,开始给你做菜这个业务。菜单是你写的,你只需要等待底层(厨师)执行完你要做的事儿就成。要是还不懂,建议你先理解一下什么是回调方法,真心的。
你看过 start和run方法的源码吗?run方法仅仅是一个普通的方法,你调用这个方法就和普通方法调用无异;
而start方法内部将当前线程加入一个线程组表示该线程获得启动权的,然后调用了一个start0方法,这个方法是native的是底层c语言调用的,用来回调run方法。所以run方法不是给用户调用的,而是给系统调用的,用户只需要在run中定义好要做的事,系统不管你要做什么 他只管执行run
这个是线程的特点
1) start: 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。 ...
回复
那这就是说直接调用run就不是多线程啦!
@刘小宸 差不多吧
其实我想说既然是 implements Runnable,,为何main方法不是使用start()方法,而是run()方法
@黄亿华
@ccc_clk
其实他想说既然是 implements Runnable,,为何main方法不是使用start()方法,而是run()方法
用Runnable,只是用这个强调入口在这里而已。你的疑惑是什么?