java中Start()之后马上执行run()吗?

来源:百度知道 编辑:UC知道 时间:2024/05/13 04:08:43
各位大侠帮帮忙
能不能解释的详细点 要是一定让他执行run()怎么办啊 这是本人的第一个问题 还不会悬赏 非常感激你们的热情帮助

能不能教教我如何写 就能一定让run()紧跟start()执行啊

楼主概念没搞清楚

首先 run()方法只是Thread,Runnable的一个普通方法,
它本身是不能调用的,只有系统调用。
也就是要new 一个实例,XX.start(),然后调用run(),实现多线程
设个断点,跟一下,你就都明白了
看一下源码,Runnble.class public abstract void run();
是不是明白了一些??

原理上是,但是不是马上,因为这得看调度机制,这个“马上”是有一段延时的 可能是几个机器周期 几微妙或者几毫秒,关键的看系统资源。如果程序没有错,调用start方法之后 就能看到run方法的效果了

线程的调用 和直接调用方法不同,线程调用要看CPU是否有资源分配给它,否则处于等待状态

当你创建线程的时候,都会调用线程内部的init方法
init方法会先由SecurityManager决定当前线程执行那些操作,没有则由当前线程拿到对应的ThreadGroup线程树(其中已有主线程),然后init方法判断它是否为守护线程,得到线程的优先级、以及内部自动生成的nextThreadID,和初始的stackSize;做完这些之后,也就完成的线程的创建
当调用start方法时 当前线程处于就绪状态。将会有两个线程开始执行 第一个是当前创建的线程,而另一线程执行创建线程的run方法。创建线程会被添加到init方法找到的ThreadGroup中,由于ThreadGroup中会有很多线程,CPU会根据当前线程的优先级,通过时间片轮转执行当前线程,时间片轮转的时间很短
,因此感觉是马上执行。
当使用匿名类创建线程直接调用start方法时,将先执行init方法再执行start方法, 使用init方法如下:
init(null, target, "Thread-" + nextThreadNum(), 0);