为什么我们调用start()方法,而方法又调用run()方法?
我们不能直接拨打电话run()吗?
请举例说明存在差异.
如果线程的start()方法在内部调用run()方法,那么为什么我们不直接在代码中调用run()方法呢?这样做涉及哪些问题?
我不明白启动和运行线程之间的区别,我测试了两种方法并输出了相同的结果,首先我在同一个线程上使用了run()和start的组合,并且它们执行的功能如下:
public class TestRunAndStart implements Runnable {
public void run() {
System.out.println("running");
}
public static void main(String[] args) {
Thread t = new Thread(new TestRunAndStart());
t.run();
t.run();
t.start();
}
Run Code Online (Sandbox Code Playgroud)
}
输出是:
running
running
running
Run Code Online (Sandbox Code Playgroud)
然后我看到run()方法的javadoc说:
If this thread was constructed using a separate Runnable run object, then that Runnable object's run method is called; otherwise, this method does nothing and returns 所以我尝试使用run()方法而没有单独的runnable,如下所示:
public class TestRun extends Thread {
public void run(){
System.out.println("Running Normal Thread");
}
public static void main(String[]args){
TestRun …Run Code Online (Sandbox Code Playgroud) 我工作的主题,当一个问题击中我的mind..If我们可以直接调用run()方法与类的像那么任何普通方法的对象为什么我们需要调用Thread.start()调用的run()方法..我尝试了两种方法,并且两者都得到了相同的结果
首先直接调用run()方法
class Abc extends Thread
{
public void run()
{
for(int i=0;i<5;i++)
{
System.out.println("Abc");
}
try
{
Thread.sleep(100);
}catch(Exception e)
{
System.out.println("Error : "+ e);
}
}
}
class Xyz extends Thread
{
public void run()
{
try
{
for(int i=0;i<5;i++)
{
System.out.println("Xyz");
}
Thread.sleep(100);
}catch(Exception e)
{
System.out.println("Error : "+ e);
}
}
}
public class ThreadDemo
{
public static void main(String[] args)
{
Abc ob=new Abc();
Xyz oc=new Xyz();
ob.run();
oc.run();
}
}
Run Code Online (Sandbox Code Playgroud)
通过调用Thread.start()进行第二次尝试
public class ThreadDemo …Run Code Online (Sandbox Code Playgroud) 这是我的代码
public class ThreadLearn{
private static class Check implements Runnable{
public void run(){
System.out.printf("\nInCheck %s", Thread.currentThread().getName());
}
}
public static void main(String[] args){
Thread t;
int i=0;
while(i<2){
t = new Thread(new GetData());
t.start();
System.out.printf("\n%s: ", t.getName());
i++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
InRun Thread-0
Thread-0:
Thread-1:
InRun Thread-1
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
输出不应该是
InRun Thread-0
线程0:
InRun Thread-1
线程1:
一旦t.start()完成,它是否会等待run()执行然后创建第二个线程?如果我想做以下怎么办?
而(必需)
new Thread().start();
在我的run方法中,我可以拥有所有我希望线程并行完成的东西,这样它就不会等待一个线程完成run方法然后创建第二个线程.
谢谢
厌恶线程类工作正常.我能理解它的过程.然后我改变了
mc.srart()进入mc.run()但没有任何改变,也没有任何错误.
有人可以向我解释一下吗?我们总是可以使用run()而不是start()吗?
public class Main {
public static void main(String[] args) {
Myclass mc = new Myclass();
mc.start();
}
}
class Myclass extends Thread {
public void run() {
for (int i = 0; i < 10; i++) {
System.out.print(i + "--");
}
}
}
Run Code Online (Sandbox Code Playgroud)