java執行緒二(建立執行緒的5種方法)
阿新 • • 發佈:2022-11-29
20221129:從正定方艙出來了,哇,呼吸呼吸新鮮空氣的感覺真好,隔壁河北工商職業學院的小哥,忘記加他微信,自己的手機沒訊號,看小哥打的csgo和 植物殭屍人大戰挺好看的,加上這小哥微信就好了,回頭教教我打,哇哈哈哈哈。
static class MyThread extends Thread { @Override public void run() { System.out.println("1.Hello MyThread!"); } } /** * 這種方式更好,因為實現了runnable之後還可以實現其他類,而一旦繼承了Thread之後就不能 * 從其他類繼承了。 **/ static class MyRun implements Runnable{ @Override public void run() { System.out.println("2.Hello MyRun"); } } static class MyCall implements Callable<String> { @Override public String call() throws Exception { return"5.successss"; } } public static void main(String[] args) throws ExecutionException, InterruptedException { new MyThread().start(); new Thread(new MyRun()).start(); new Thread(()->{ System.out.println("4.Hello Lambda!"); }).start(); ExecutorService service= Executors.newCachedThreadPool(); service.execute(()->{ System.out.println("3.Hello ThreadPool"); }); //5. Future可以帶有返回值,也是利用執行緒池來實現 Future<String> f = service.submit(new MyCall()); try { String s = f.get(); System.out.println(s); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } service.shutdown(); //6.也可以自己寫FutureTask,只是沒有執行緒池方便 FutureTask<String> task = new FutureTask<>(new MyCall()); Thread t = new Thread(task); t.start(); System.out.println(task.get()); //get方法會同步等待返回. }