示?1
class Test{ public static void main(String[] args) { /** * 1.创建CountOperate对象时,调用了该构造方法,此时是主线程执行构造方法的代码块,所以Thread.currentThread().getName()=main; * this.getName()是获取当前线程实例(countOperate)的名字;如果未指定,默认为Thread-0 * 2.t1.start()启动线程,调用目标对象(countOperate)的run(),所以Thread.currentThread().getName()=A;如果未指定Thread的名字,默认为Thread-1 * this.getName()是获取当前线程实例(countOperate)的名字;如果未指定,默认为Thread-0 */ //测试1 // CountOperate countOperate=new CountOperate(); //测试2 // CountOperate countOperate=new CountOperate(); // countOperate.setName("B"); //测试3 CountOperate countOperate=new CountOperate("B"); /** * public Thread(Runnable target) { * init(null, target, "Thread-" + nextThreadNum(), 0); * } * * 如果未指定name: * CountOperate继承了Thread,所以在初始化的时候回分配一个名称Thread-0。而t1则是第二个线程初始化,分配的名字是Thread-1 */ Thread t1=new Thread(countOperate); t1.setName("A"); t1.start(); } } class CountOperate extends Thread{ public CountOperate() { System.out.println("CountOperate---begin"); System.out.println("Thread.currentThread().getName()="+Thread.currentThread().getName()); //Thread.currentThread().getName()指调用代码片段的线程名字 System.out.println("this.getName()="+this.getName()); //this指向自己;this.getName()指当前线程类的实例的名字;为设置name属性时,name属性会被默认设置 System.out.println("CountOperate---end"); } public CountOperate(String name) { this.setName(name); System.out.println("CountOperate---begin"); System.out.println("Thread.currentThread().getName()="+Thread.currentThread().getName()); //调用代码片段的线程信息 System.out.println("this.getName()="+this.getName()); //当前线程类的名字 System.out.println("CountOperate---end"); } @Override public void run() { System.out.println("run---begin"); System.out.println("Thread.currentThread().getName()="+Thread.currentThread().getName()); System.out.println("this.getName()="+this.getName()); System.out.println("run---end"); } }