创建线程5种方法
1、继承Thread,重写run方法,调用start启动
2、实现Runnable接口,重写run方法,调用start启动。
3、lambda表达式
public class MyThread { static class MyExtend extends Thread{ @Override public void run() { System.out.println("Thread"); } } static class MyRun implements Runnable{ @Override public void run() { System.out.println("Thread"); } } public static void main(String[] args) { new MyExtend().start(); new Thread(new MyRun()).start(); new Thread(()->{ System.out.println("Thread"); }).start(); } }
4、对于继承Thread和实现Runnable哪种更好?
实现更好,java是单继承多实现的
5、线程池创建线程
ExecutorService service = Executors.newCachedThreadPool(); service.execute(()->{ System.out.println("Thread"); }); service.shutdown();
6、实现Callable接口
因为实现Runnale接口返回值是写死的void,不灵活,Callable接口返回值可以自己设定
public class MyCallable implements Callable{ @Override public String call() throws Exception { return "success"; } public static void main(String[] args) throws ExecutionException, InterruptedException { ExecutorService service = Executors.newCachedThreadPool(); Future submit = service.submit(new MyCallable()); String s = submit.get(); System.out.println(s); service.shutdown(); } }