多线程的三种实现方法
/***
* 第一种 继承Thread类
*/
class MyThread extends Thread{
@Override
public void run() {
System.out.println("继承Thread类");
}
}
/***
* 第二种 实现runnable接口
*/
class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("实现runnable接口");
}
}
/***
* 实现callable 获取返回值
*/
class MyCallable implements Callable{
@Override
public Object call() throws Exception {
System.out.println("实现callable");
return "实现callable 返回";
}
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
MyThread myThread = new MyThread();
myThread.start();
MyRunnable myRunnable = new MyRunnable();
new Thread(myRunnable).start();
MyCallable myCallable = new MyCallable();
FutureTask futureTask = new FutureTask<>(myCallable);
new Thread(futureTask).start();
System.out.println(futureTask.get());
}
疑惑点 Thread 调用 start() 方法和调用 run() 方法的区别
run():普通的方法调用,在主线程中执行,不会新建一个线程来执行。
start():新启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到 CPU 时间片,就开始执行 run() 方法。