楼主,直接看我的解释,
我看完了楼上所有的解释,
虽然都对,但不利于理解。
首先,你这个问题完全可以简化为两个线程,一是main方法的主线程,二是自己new的线程。
然后根据你的问题,结合自定义线程的两种方式,来看你理解有误的地方。
你在程序中,用的是implements的方式,
估计你觉得重写NewThread类的构造方法,
就能够输出你所自定义的名字。
但你要注意, new Thread(new NewThread("a")).start();这一句,
真正运行的线程是红色的那个,NewThread所产生的对象,
只是作为target提供run方法被调用而已。
所以,按照你原来的想法,应该用API提供的构造方法:Thread(Runnable target,String name)
程序如下:
- public class Test {
- public static void main(String[] args) {
- Thread t1 = new Thread(new NewThread(),"A");
- Thread t2 = new Thread(new NewThread(),"B");
- t1.start();
- t2.start();
- for (int x = 0; x < 100; x++) {
- System.out.println(x + " " + Thread.currentThread().getName());
- }
- }
- }
- class NewThread implements Runnable {
- public void run() {
- for (int x = 0; x < 100; x++) {
- System.out.println(x + " " + Thread.currentThread().getName());
- }
- }
- }
复制代码
再来说说继承Thread类的创建方式,有了上面这参考,
这个方式就相对好办了,只要在你自定义的NewThread中,
调用Thread(String name)这个构造方法重写就可以了,
程序如下:
- public class Test {
- public static void main(String[] args) {
- NewThread A = new NewThread("A");
- NewThread B = new NewThread("B");
- A.start();
- B.start();
- for (int x = 0; x < 100; x++) {
- System.out.println(x + " " + Thread.currentThread().getName());
- }
- }
- }
- class NewThread extends Thread {
-
- public NewThread(String name){
- super(name);
- }
-
- public void run() {
- for (int x = 0; x < 100; x++) {
- System.out.println(x + " " + Thread.currentThread().getName());
- }
- }
- }
复制代码
只要看清楚,就不容易出错了。
|