创建线程的方式

package com.hyou;

import java.util.concurrent.*;

public class ThreadDriver {

    public static void main(String[] args) {
        // 第一种方式
        // OneThread oneThread = new OneThread();
        // oneThread.start();

        // 第二种方式
        // TwoThread twoThread = new TwoThread();
        // Thread thread = new Thread(twoThread);
        // thread.start();

        // 第三种方式
        // ThirdThread thirdThread = new ThirdThread();
        // FutureTask futureTask = new FutureTask(thirdThread);
        // new Thread(futureTask).start();
        // try {
        //     Object object = futureTask.get();
        //     System.out.println(object);
        // } catch (Exception e) {
        //     throw new RuntimeException(e);
        // }

        // 第四种方式
        ThreadPoolExecutor executor = new ThreadPoolExecutor(
                5,
                8,
                24,
                TimeUnit.HOURS,
                new ArrayBlockingQueue<>(8),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy());
        executor.execute(new OneThread());
        executor.execute(new TwoThread());

        // 第五种方式
        // new Thread(() -> {
        //     System.out.println(Thread.currentThread().getName());
        // }).start();
    }

    /**
     * 第一种方式 继承Thread类,重写run()方法
     */
    static class OneThread extends Thread {
        @Override
        public void run() {
            System.out.println("线程名称:" + Thread.currentThread().getName());
        }
    }

    /**
     * 第二种方式 实现Runnable接口,重写run()方法
     */
    static class TwoThread implements Runnable {
        @Override
        public void run() {
            System.out.println("线程名称:" + Thread.currentThread().getName());
        }
    }

    /**
     * 第三种方式 实现Callable接口,重写call()方法
     * 创建Callable接口实现类的对象
     * 将此Callable接口实现类对象传递到FutureTask构造器,创建FutureTask对象
     * 将FutureTask对象传递到Thread类的构造器,创建Thread对象,并调用start()
     * 获取Callable中call方法的返回值
     */
    static class ThirdThread implements Callable {

        @Override
        public Object call() throws Exception {
            int sum = 0;
            for (int i = 0; i < 10; i++) {
                if (i % 2 == 0) {
                    System.out.println(Thread.currentThread().getName() + " " + i);
                    sum += i;
                }
            }
            return sum;
        }
    }

}

你可能感兴趣的:(java)