Java 多线程,Thread,Runnable,Callable

1. 什么是线程?

  一个程序同时执行多个任务,每一个任务称为一个线程。

2. 怎么创建线程?

    2.1 创建线程的方式

    1)  实现Runnable接口,并实现run()方法.
    2) 继承Thread类,并且重写run()方法.
    3) 实现Callable接口,并实现call()方法.

    2.2 创建线程
     1)通过实现Runnable接口的方式:
      由于Runnable接口是一个函数式接口,所以在此可以用lambda表达式的方式来实现这个接口.
        Runnable runnable = () -> {
            for (int i = 0;i < 20;i++){
                System.out.println("Thread_1," + i);
            }
        };

      2)通过继承Thread类的方式:

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

      3)通过实现Callable接口的方式:

        class Thread_3 implements Callable<StringBuilder>{
            @Override
            public StringBuilder call() throws Exception {
        
                StringBuilder sb = new StringBuilder("Thread_3,");
                for (int i = 0;i < 20;i++){
                    sb.append(Integer.toString(i));
                    System.out.println("Thread_3," + i);
                }
                return sb;
            }
        }

        此方式也可以用lambda表达式的方式直接实例化一个线程。

        这种方式是支持返回值的,Callable<T> 中的泛型就是这个线程的返回值,不写默认返回null。

      2.3 启动线程

        前两种创建线程的启动方式是t.start();

        第三种的启动方式是t.call(),同时带有返回值。

        Thread t1 = new Thread(runnable);
        Thread_2 t2 = new Thread_2();
        Thread_3 t3 = new Thread_3();
        t1.start();
        t2.start();
        try {
            String thread3Result = t3.call().toString();
            System.out.println("Thread_3 :" + thread3Result);
        } catch (Exception e) {
            e.printStackTrace();
        }

 

posted @ 2019-08-07 19:51  lovleo  阅读(262)  评论(0编辑  收藏  举报