一个类(假如叫ThreadAndRunnable)extends Thread与implements Runnable,我有几点看法:
1、如果extends Thread后就不能extends其他类了
2、如果implements Runnable,那还是要将一个ThreadAndRunnable对象传到Thread的构造方法中,new出一个线程对象,
并调用start()方法才能启动那个ThreadAndRunnable实例对应的线程(能这样叫不?)
3、有人说implements Runnable能让多个线程共享一个ThreadAndRunnable实例,但我认为extends Thread时把相应的field声明为static也可以实现一样的功能,比如下面两段代码的功能是一样的:class ThreadAndRunnable implements Runnable {
private int x = 0;
public void run() {
System.out.println(++x);
}
}public class Test {
public static void main(String[] args){
ThreadAndRunnable r = new ThreadAndRunnable();
for (int i = 0; i < 10; i++) {
Thread t = new Thread(r);
t.start();
}
}
}
与class ThreadAndRunnable extends Thread {
private static int x = 0;
public void run() {
System.out.println(++x);
}
}public class Test {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
Thread t = new ThreadAndRunnable();
t.start();
}
}
}总之,我觉得除了上面1、2两点外,这两种方式没有区别了,希望大家帮忙,让我走出误区~
1、如果extends Thread后就不能extends其他类了
2、如果implements Runnable,那还是要将一个ThreadAndRunnable对象传到Thread的构造方法中,new出一个线程对象,
并调用start()方法才能启动那个ThreadAndRunnable实例对应的线程(能这样叫不?)
3、有人说implements Runnable能让多个线程共享一个ThreadAndRunnable实例,但我认为extends Thread时把相应的field声明为static也可以实现一样的功能,比如下面两段代码的功能是一样的:class ThreadAndRunnable implements Runnable {
private int x = 0;
public void run() {
System.out.println(++x);
}
}public class Test {
public static void main(String[] args){
ThreadAndRunnable r = new ThreadAndRunnable();
for (int i = 0; i < 10; i++) {
Thread t = new Thread(r);
t.start();
}
}
}
与class ThreadAndRunnable extends Thread {
private static int x = 0;
public void run() {
System.out.println(++x);
}
}public class Test {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
Thread t = new ThreadAndRunnable();
t.start();
}
}
}总之,我觉得除了上面1、2两点外,这两种方式没有区别了,希望大家帮忙,让我走出误区~
public class Test {
public static void main(String[] args){
ThreadAndRunnable r = new ThreadAndRunnable();
for (int i = 0; i < 10; i++) {
Thread t = new Thread(r);
t.start();
}
ThreadAndRunnable r2 = new ThreadAndRunnable();
for (int i = 0; i < 10; i++) {
Thread t = new Thread(r2);
t.start();
}
}
}
还有 用接口 只有一个方法
extends 不用new了 直接start
我也就知道这些 呵呵
看了楼主的帖子又明白了一些不知道的
jiangnaisong 很形象的解释。