建立線程的四種方式(轉載)

本文介紹建立線程常見的四種方式,使用了匿名內部類以使代碼儘可能簡潔。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

相關文章
相關標籤/搜索