class RunClass implements Runnalble { @Override public void run() {...} } Thread newThread = new Thread(new RunClasss()); newThread.start();
固然,這裏使用lambda表達式或者匿名類都是能夠的,道理都同樣java
//這裏實際上是不對的,框架只是給人提供了必定方便的類庫,但本質上仍是使用的上面兩種方法。 3. 利用Callable<T>接口和Future框架建立線程 剛學習Java的人對這種方法可能瞭解很少,其步驟以下: 1. 建立新類實現Callable接口,並實現call()方法,該call方法將做位線程功能的執行代碼(相似run,但run無返回值,call有返回值) 2. 建立Callable實現類的實例,使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call方法的返回值 3. 使用FutureTask對象的get()方法來得到子線程執行結束後的返回值框架
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class CallableDemo implements Callable<String> { private final String value; public CallableDemo(String value) { this.value = value; } @Override public String call() { return value; } static public void main(String[] args) { FutureTask<String> ft = new FutureTask<String>(new CallableDemo("Hello")); Thread t = new Thread(ft); t.start(); try { System.out.println(ft.get());//get()將阻塞直至獲得結果 } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } }
以上代碼展現了Collable接口的使用,其與前兩種方法的主要區別就是call()有返回值,調用Future的get()方法時,將產生阻塞,直至產生結果,這個特性能夠用於後臺計算等場景。ide