想要学会多线程超简单! 每天5分钟达成!(线程开启的其他方式)

 public static void main(String[] args) throws ExecutionException, InterruptedException {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程的第二种开启方式");
            }
        });
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("Runnable中的run方法执行了");
            }
        };
        //线程开启的第三种方式 
        Callable<Date> callable = new Callable() {
            @Override
            public Date call() throws Exception {
                for (int i = 0; i < 4; i++) {
                    System.out.println(Thread.currentThread().getName()+i);
                }
                return new Date();
            }
        };
        //创建线程池对象
        ExecutorService ex = Executors.newFixedThreadPool(3);
        //ex.execute()此方法只能传入runnable接口
        Future<Date> s = ex.submit(callable);
        //获取call方法中的返回值
        Date date = s.get();
        System.out.println("callable中的返回值:"+date);
        //获取runnable方法中的返回值
        Future<?> s1 = ex.submit(runnable);
        Object o = s1.get();
        System.out.println("runnable接口中的返回值"+o);
        //关闭线程池
        ex.shutdown();
        
    }

第一种方式:编写一个类,直接继承java.lang.Thread 重写run方法

第二种方式,编写一个类实现java.lang.Runnable接口

第三种 Callable
->为了提高效率
Runnble 中 run 没有返回值
而call有返回值

上一篇:20190630A(贪心)


下一篇:Java并发基础学习(一)——实现并正确启动一个线程