(三)Java线程创建方式
我们平时用main方法执行的代码,都是以主线程去执行。如果要使用多线程,可以使用以下三种方式去创建:
# 1. 继承Thread类
class MyThread extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "---->>>>" +"继承Thread类");
}
}
# 2. 实现Runnable接口
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "---->>>>" +"实现Runable接口");
}
}
启动线程:
Thread myThread = new MyThread();
// myThread.run();//run()只是当普通方法去执行
myThread.start();
Thread myRunnable = new Thread(new MyRunnable());
myRunnable.start();
语法糖:
如果不想这么麻烦,可以使用这种方法启动一个线程执行需要的内容
new Thread(new Runnable() {
@Override
public void run() {
System.out.println( Thread.currentThread().getName() + "---->>>>" + "简易创建线程");
}
});
//jdk1.8以上可以用lambda语法
new Thread(() -> {
System.out.println(Thread.currentThread().getName() + "---->>>>" + "简易创建线程");
}).start();
# 3. 实现callable接口
public class ThreadDemo3 {
public static void main(String[] args) {
ExecutorService service = Executors.newFixedThreadPool(1);
Future<String> future = service.submit(new Callable() {
@Override
public String call() throws Exception {
System.out.println("通过实现Callable接口");
return "TRUE";
}
});
try {
String result = future.get();
if (result.equals("TRUE")){
System.out.println("线程执行完成");
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
实现Callable接口,可以使用Future.get()方法获取线程执行的结果。
# Thread与Runnable的区别
事实是Thread和Runnable没有本质的区别。
点击Thread类,看一下源码,你会发现其实Thread也是实现了Runnable接口
public class Thread implements Runnable {
/* Make sure registerNatives is the first thing <clinit> does. */
private static native void registerNatives();
static {
registerNatives();
}
区别就是执行顺序:
继承Thread类的顺序是:
Thread.start()→Thread.run()
实现Runable接口顺序是:
Thread.start()→Thread.run()→Runable.run()
上次更新: 2024-05-23 10:33:15