java多線程學習、線程的創建方式(二)

線程創建的方式有四種方法:

  1. 通過繼承Thread;
  2. 實現Runnable接口;
  3. 實現Callable接口,這種方式需要一箇中間類來協助現成的創建,
  4. 通過線程池的方式來進行線程的創建。

具體實現類:

package com.jxkj.juc;

import com.google.common.util.concurrent.ThreadFactoryBuilder;

import java.util.concurrent.*;

/**
 * 功能描述:
 *
 * @author wcx
 * @version 1.0
 */
public class CreateThread4Way {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //1. 繼承線程類
        new ExtendsThread().start();
        //2. 實現Runnable接口
        new Thread(new ImplRunnable(), "A").start();
        //3. 實現Callable接口
        FutureTask futureTask = new FutureTask(new ImplCallable());
        new Thread(futureTask, "B").start();
        System.out.println(futureTask.get());
        //4. 通過線程池創創建
        MyThreadPool myThreadPool = new MyThreadPool();
        myThreadPool.getThread();

    }
}

class ExtendsThread extends Thread {

}

class ImplRunnable implements Runnable {

    @Override
    public void run() {

    }
}

class ImplCallable implements Callable {

    @Override
    public Object call() throws Exception {
        return "我是實現Callable的線程";
    }
}

class MyThreadPool {


    /**
     * 定義靜態內部線程類
     */
    public class MyTestThread implements Runnable {

        @Override
        public void run() {
            System.out.println(System.currentTimeMillis() + "name:"
                    + Thread.currentThread().getName());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public void getThread() {
        MyTestThread myTestThread = new MyTestThread();
        ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
                .setNameFormat("thread-pool-%d").build();
        ExecutorService executorService = new ThreadPoolExecutor(5, 10,
                0L, TimeUnit.MILLISECONDS,
                new LinkedBlockingDeque<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
        for (int i = 0; i < 15; i++) {
            executorService.execute(myTestThread);
        }
        executorService.shutdown();
    }

}

謝謝大家的閱讀!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章