为了测试多个线程运行的情况,我自己想出来下面的代码
public class TThread{
public static void main(String[] args){
A aa = new A();
Thread t1 = new Thread(aa);
t1.start();
Thread t2 = new Thread(new B(t1));
t2.start();
System.out.println(t1.getName());
}
}
class A implements Runnable{
@Override
public void run(){
for(int i=0; i<10; ++i){
System.out.println(Thread.currentThread().getName());
}
}
}
class B implements Runnable{
Thread t;
public B(Thread t){
this.t = t;
}
@Override
public void run(){
t.setName("哈哈");
}
}某次运行结果是如下:
Thread-0
Thread-0
Thread-0
Thread-0
Thread-0
哈哈
哈哈
哈哈
哈哈
哈哈
Thread-0
我自己思考结果的时候认为既然哈哈出现,那t1进程的名字就应该已经被修改了,以后的get到的t1的名字不就都应该是哈哈了么,为什么还会出现初始默认的Thread-0的结果。不知道是我哪里推理错了,还是对某个方法的执行过程没有了解透彻
------解决思路----------------------
是的,System.out对应的是PrintStream这个输出流,PrintStream底层又会调用到BufferedWriter和OutputStreamWriter这2个输出流。具体你可以看下System这个类中的out静态变量,及PrintStream这个类中的println()方法及其各个重载方法的实现操作。所以一个输出语句的打印会涉及到各个类之间的调用。不是立刻输出。所以才会有你疑问中的相关描述。