java中,是否是main线程执行完后才运行子线程

java中,是否是main线程执行完后才运行子线程,第1张

当然不是 程序是先从main方法开始执行的(即从main线程开始执行) 只要main方法里执行了其他线程的start方法 则其他线程就会进入就绪状态 这时就看CUP分配时间片给谁 谁就执行了

1,当你运行这个类的时候,首先是java虚拟机自动创建一个线程,假设为T1,

这个线程会调用main方法,main方法是java虚拟机自动调用的,调用的这个线程,

即通常我们 说的主线程

2,ThreadDemo 是你自定义的一个线程,

当T1线程调用tstart();的时候,此时就启动了线程ThreadDemo,T1线程只是告诉线程ThreadDemo,啊,我通知一下,你可以运行了。我还有工作没做完,我先走了,ThreadDemo这个线程运行后, 会自动调用run方法,所以run方法是在threadDemo线程中运行的, Systemoutprintln(currentThread()getName() + "---" + i);打印的是ThreadDemo 线程

3,T1线程通知threadDemo可以运行以后,他就不管ThreadDemo了,调用tstart()后,

会立即执行下面的代码trun,因为trun的调用与普通方法没有任何区别,

trun与tstart不一 样,因为java规范规定start启动一个线程,但没规定run方法启动一个线程

那么既然run方法没有启动新的线程,那么trun();方法还是在T1线程中运行的

所以trun();是打印的是main线程

public class THread 

{

static C c=new C();

//flag用来标志子线程执行结束

static boolean flag=false;

public static void main(String []arg)

{

csetvalue(12);

Systemoutprintln("子线程执行之前value的值是:"+cgetvalue());

Systemoutprintln("执行子线程");

Thread mythread = new MyThread(c);

mythreadstart();

//等待子线程执行结束

while(!flag) Threadsleep(1000);

Systemoutprintln("子线程执行之后value的值是:"+cgetvalue());

}

 

public static void callback()

{

Systemoutprintln("子线程执行结束");

flag=true;

}

}

 

 

class C

{

private int value=0;

public int getvalue()

{

return value;

}

public void setvalue(int v)

{

thisvalue=v;

}

}

 

 

 

class MyThread extends Thread

{

public MyThread(C cc)

{

thiscc=cc;

}

private C cc;

@Override

public void run() 

{

ccsetvalue(20);

THreadcallback();//回调

}

}

以上就是关于java中,是否是main线程执行完后才运行子线程全部的内容,包括:java中,是否是main线程执行完后才运行子线程、Java主线程、非主线程的问题、java问题,main方法中开启了一组线程,然后希望这组线程全执行完之后再继续main方法向下进行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9754783.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存