本文介紹建立線程常見的四種方式,使用了匿名內部類以使代碼儘可能簡潔。java
import org.junit.Test;
import java.util.concurrent.*;segmentfault
public class ThreadTest {框架
/** * 繼承Thread類 */ @Test public void test01() { new Thread() { @Override public void run() { System.out.println(Thread.currentThread().getName() + " is running..."); } }.start(); } /** * 實現Runnable接口 */ @Test public void test02() { new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + " is running..."); } }).start(); } /** * 使用Callable和Future建立線程 * 步驟 * 建立實現Callable接口的類myCallable * 以myCallable爲參數建立FutureTask對象 * 將FutureTask做爲參數建立Thread對象 * 調用線程對象的start()方法 * * @throws InterruptedException * @throws ExecutionException */ @Test public void test03() throws InterruptedException, ExecutionException { FutureTask<String> fu = new FutureTask(new Callable<String>() { @Override public String call() { System.out.println(Thread.currentThread().getName() + " running..."); return Thread.currentThread().getName() + " result returned."; } }); new Thread(fu).start(); Thread.sleep(1000); System.out.println(fu.get()); } /** * 使用Executor框架建立線程池 * Executors提供了一系列工廠方法用於創先線程池,返回的線程池都實現了ExecutorService接口。 * 主要有newFixedThreadPool,newCachedThreadPool,newSingleThreadExecutor,newScheduledThreadPool,後續詳細介紹這四種線程池 * * @param args */ public static void main(String[] args) { for (int i = 0; i < 10; i++) { Executors.newSingleThreadExecutor().execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName() + " is running"); } }); } }
}ide
這是一個技術和財經都會分享的公衆號url
————————————————
版權聲明:本文爲CSDN博主「ycfn97」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連接及本聲明。
原文連接:https://blog.csdn.net/ycfn97/....net