|
演示简单线程输出:
public class Test{
public static void main(String[] aaaa){
Thread t1=new Thread(){
@Override
public void run(){
System.out.println("我是线程1");
}
};
Thread t2=new Thread(){
@Override
public void run(){
System.out.println("我是线程2");
}
};
t1.start();
t2.start();
System.out.println("大家好");
}
}
线程 :执行从run方法开始 ,被执行后在栈申请了两个线程栈,
t1,t2各自在线程栈里把run方法压入,run方法调用其他方法就是拷贝其他方法压入栈中
两个线程主体就是对象。
执行结果为:

?可以看到 先输出 “大家好”,这是因为主线程属于当前正在执行的线程,?不会被cpu 换掉
简单任务 大概率 主线程先执行 再线程切换
而 线程切换是有开销的 (耗时),因为要保持上一个线程的状态。
注意:t1.start();? ? 虽然写的是 start 但并不是立即执行的意思,而是就绪的意思,告诉cpu可以执行啦。如果是立即执行会对其他线程造成破坏
?
?887 ,885 就是个地址名 不用在意
主线程是主方法所在的线程成为主线程,只负责创建子线程。创建完之后两者没有关系了就。
|