当然不是 程序是先从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方法向下进行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)