十年網站開發(fā)經驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網站問題一站解決
java創(chuàng)建線程的方式有幾種?這篇文章運用了實例代碼展示,代碼非常詳細,可供感興趣的小伙伴們參考借鑒,希望對大家有所幫助。
1、繼承Thread類
public class ThreadCreator extends Thread{ public static void main(String[] args) { //第一種方式: ThreadCreator creator = new ThreadCreator(); Thread thread = new Thread(creator,"線程1"); thread.start(); //第二種方式: Thread thread = new ThreadCreator(); thread.start(); //第三種方式: new ThreadCreator().start(); } @Override public void run() { System.out.println(Thread.currentThread().getName() + "run"); } }
2、實現(xiàn)Runnable接口
(免費學習視頻教程分享:java視頻教程)
public class ThreadCreator implements Runnable{ public static void main(String[] args) { ThreadCreator creator = new ThreadCreator(); Thread thread = new Thread(creator,"線程1"); thread.start(); } @Override public void run() { System.out.println(Thread.currentThread().getName() + "run"); } }
3、實現(xiàn)Callable接口
public class ThreadCreator implements Callable{ public static void main(String[] args) throws ExecutionException, InterruptedException { ThreadCreator creator = new ThreadCreator(); FutureTask futureTask = new FutureTask(creator); Thread thread = new Thread(futureTask,"線程"); thread.start(); System.out.println(futureTask.get()); } @Override public Integer call() { return 1024; } }
4、線程池ExecutorService
public class ThreadCreator{ static ExecutorService service = Executors.newFixedThreadPool(5); public static void main(String[] args) throws ExecutionException, InterruptedException { //execute無返回值 service.execute(new ThreadTask(1,"1")); //submit有返回值 Futureresult = service.submit(new ThreadTaskCall()); System.out.println(result.get()); service.shutdownNow(); } static class ThreadTask implements Runnable{ private int param1; private String param2; public ThreadTask(int param3,String param4){ this.param1 = param3; this.param2 = param4; } @Override public void run() { System.out.println(param1+param2); } } static class ThreadTaskCall implements Callable { @Override public Integer call() throws Exception { return 1024; } } }
線程池中submit和execute的區(qū)別:
(1)可接受的任務類型不一樣:execute只能接受Runnable任務,submit還可以接受Callable任務。
(2)返回值:execute無返回值,任務一旦提交,無法在當前線程中監(jiān)控執(zhí)行結果。submit有一個Future類型的返回值,用來接收返回值或響應異常。通過get()方法獲取。
submit底層還是調用的execute,只是在此基礎上用future封裝了一層,并將執(zhí)行過程中產生的異常全部封裝在一個變量中:
public void run() { if (state != NEW || !UNSAFE.compareAndSwapObject(this, runnerOffset, null, Thread.currentThread())) return; try { Callablec = callable; if (c != null && state == NEW) { V result; boolean ran; try { result = c.call(); ran = true; } catch (Throwable ex) { result = null; ran = false; setException(ex); } if (ran) set(result); } } finally { runner = null; int s = state; if (s >= INTERRUPTING) handlePossibleCancellationInterrupt(s); } } protected void setException(Throwable t) { if (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, COMPLETING)) { outcome = t; UNSAFE.putOrderedInt(this, stateOffset, EXCEPTIONAL); // final state finishCompletion(); } }
另外,spring中的schedule注解借鑒使用了submit的處理方式。
5、匿名內部類
public class ThreadCreator { public static void main(String[] args) { //繼承Thread類 new Thread() { @Override public void run() { System.out.println("extends Thread Class!"); } }.start(); //實現(xiàn)Runnable接口 new Thread(new Runnable() { @Override public void run() { System.out.println("implement Runnable!"); } }).start(); //實現(xiàn)Callable接口 new Thread(new FutureTask(new Callable() { @Override public Integer call() throws Exception { return 1024; } })).start(); //lambda表達式 new Thread(() -> System.out.println("execute single code")).start(); new Thread(() -> { System.out.println("execute multiple code"); }).start(); } }
lambda線程池:
public class ThreadCreator { static ExecutorService service = Executors.newFixedThreadPool(5); static List list = new ArrayList(); public static void main(String[] args) { service.execute(() -> execute()); //無返回值 Future future = service.submit(() -> execute()); //有返回值 list.add(future); } public static void execute() { //do something } }
以上就是java創(chuàng)建線程的方式匯總,內容較為全面,小編相信有部分知識點可能是我們日常工作可能會見到或用到的。希望你能通過這篇文章學到更多知識。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。