一、继承Thread类
public class ThreadDemo extends Thread{
@Override
public void run() {
System.out.println("启用多线程。。。");
}
public static void main(String[] args) {
ThreadDemo threadDemo = new ThreadDemo();
threadDemo.start();
}
}
二、实现runnable接口
public class RunnableDemo implements Runnable{
@Override
public void run() {
System.out.println("启用多线程。。。");
}
public static void main(String[] args) {
RunnableDemo runnableDemo = new RunnableDemo();
new Thread(runnableDemo).start();
}
}
三、lambda表达式
public static void main(String[] args) {
new Thread(()->{
System.out.println("启动线程。。。");
}).start();
}
四、线程池
public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool();
executorService.execute(new ThreadDemo());
}
五、callable与future
1.线程池启动
public static void main(String[] args) throws ExecutionException, InterruptedException {
CallableDemo callableDemo = new CallableDemo();
ExecutorService executorService = Executors.newCachedThreadPool();
Future<String> future = executorService.submit(callableDemo);
System.out.println(future.get());
}
2.用Thread包装启动
public class CallableDemo implements Callable<String> {
@Override
public String call() throws Exception {
return "启动线程。。。";
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
CallableDemo callableDemo = new CallableDemo();
FutureTask<String> futureTask = new FutureTask<>(callableDemo);
new Thread(futureTask).start();
System.out.println(futureTask.get());
}
}
六、总结
其实本质上,5种方法都是new出Thread对象调用start方法,包括线程池底层也是Thread