Java线程生命周期

  • Java 线程中的 BLOCKED、WAITING、TIMED_WAITING 是一种状态,即前面我们提到的阻塞状态。

点击查看【processon】

线程执行顺序

  • join

    java实现

    Thread (1.5之前)

    Runnable (1.5之前)

    Callable (1.5之后)

    ```java import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask;

public class ThreadTest {

  1. public static void main(String[] args) throws ExecutionException, InterruptedException {
  2. FutureTask<String> stringFutureTask = new FutureTask<>(new CallableTest());
  3. new Thread(stringFutureTask).start();
  4. System.out.println(stringFutureTask.get());
  5. }

}

class CallableTest implements Callable { @Override public String call() throws Exception { return “call print”; } } ```

区别

实现Runnable接口和继承Thread类有如下优势

  1. 可以避免由于java单继承特性而带来的局限
  2. 增强程序的健壮性,代码能够被多个线程共享。代码和数据是独立的。
  3. 线程池只能放入实现Runnable类或Callable类的线程,不能直接放入继承Thread的类

    实现Runnable和Callable 区别

  4. Runnable自动JAVA1.1就有了,而Callable是1.5之后才加入的

  5. 实现Callable接口的任务线程能够返回执行结果。
  6. Callable接口的call方法允许抛出异常,而Runnable接口run方法只能在内部消化
  7. 加入线程池运行,Runnable使用ExecutorService的execute方法。Callable使用submit方法