1.java实现多线程有几种方法?
2种 根据Oracle的官方说明。
方法一:实现Runnable接口
方法二:继承Thread类
方法一:
#实现Runnable接口
public class RunnableStyle implements Runnable {
public static void main(String[] args) {
Thread thread1 = new Thread(new RunnableStyle());
thread1.start();
}
@Override
public void run() {
System.out.println("用Runnable实现线程");
}
}
方法二:
package threadcoreknowledge.createthreads;
public class ThreadStyle extends Thread {
@Override
public void run(){
System.out.println("用Thread类实现线程");
}
public static void main(String[] args) {
Thread a = new Thread();
a.start();
}
}
这两种实现那种更好?
方法一的run
/* What will be run. */
//实现Runnable 会在构造函数是将这个实现的对象初始化
private Runnable target;
@Override
public void run() {
if (target != null) {
target.run();
}
}
方法二和方法一致 但是实现继承 会覆盖run方法
@Override
public void run() {
if (target != null) {
target.run();
}
}
同时继承 Thread 和实现 Runnable 接口
public class BothRunnableThread {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("我来自Runable");
}
}){
@Override
public void run() {
System.out.println("我来自Thread");
}
}.start();
}
}
console:
我来自Thread
为什么输出的是我来自Thread?
因为在实现Thread时也重写了run方法。