0
点赞
收藏
分享

微信扫一扫

线程创建的四种方式

深夜瞎琢磨 2022-02-10 阅读 118

第一种继承Thread

public class ThreadDemo extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
    }

    public static void main(String[] args) {
        new Thread(new ThreadDemo()).start();
    }
}

这种方法有缺陷,注意重写的方法返回是没有值的。

第二种实现Runnable接口

public class RunnableDemo implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
    }

    public static void main(String[] args) {
        new Thread(new RunnableDemo()).start();
    }
}

这种方式也是没有返回值的

第三种实现callable接口

注意这种方法是有返回值的

public class CallableDemo implements Callable {
    @Override
    public Object call() throws Exception {
        int num=0;
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
           num++;
        }
        return num;
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CallableDemo callable01 = new CallableDemo();
        Future<CallableDemo> Task = new FutureTask<CallableDemo>(callable01);
        new Thread((Runnable) Task).start();
        System.out.println(Task.get());
    }
}

第四种使用线程池创建

自定义线程池

public class ExecutorDemo {
    public static void main(String[] args) {
        ExecutorService executorService= new ThreadPoolExecutor(5,10,10,TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(5));
        for (int i = 0; i < 10; i++) {
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName());
                }
            });
        }
    }
}

线程池工具类

public class ExecutorDemo {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newCachedThreadPool();
        executorService.execute(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }
        });
    }
}
举报

相关推荐

0 条评论