//匿名 Thread 类 new Thread(){ //重写 run 方法 @Override public void run() { super.run(); } }.start();
class MyThread extends Thread { @Override public void run() { super.run(); } } //假设把 run 方法当作一个任务,那么每建立一个线程,就有一个新的任务 MyThread myThread = new MyThread(); myThread.start();
Thread 也实现了 Runnable 接口java
多个线程相互独立,由于建立了多个任务,没法实现资源共享(资源写在 MyThread 类里)ide
Java 单继承的特性致使不够灵活线程
//须要借助 Thread 类 new Thread(new Runnable() { //重写 run 方法 @Override public void run() { } }).start();
class MyRunnable implements Runnable { @Override public void run() { } } //其实仍是经过 Thread 类对象来建立线程的,每建立一个线程,传入的是同一个任务 new Thread(new MyRunnable()).start();
多个线程协调做业,完成同一个任务,实现了资源共享(资源写在 MyRunnable 类里)code
能够避免因为 java 单继承特征带来的局限性对象
//一样须要借助 Thread 类 new Thread(new FutureTask<String>(new Callable<String>() { @Override public String call() throws Exception { return null; } })).start();
class MyCallable implements Callable<String>{ @Override public String call() throws Exception { return null; } } MyCallable myCallable = new MyCallable(); //FutureTask 实现了 RunnableFuture<V> 接口,而 RunnableFuture 继承了 Runnable 和 Future<V> FutureTask<String> futureTask = new FutureTask<>(myCallable); //Runnable 的特性 new Thread(futureTask).start(); //获取返回值, Future<V> 的特性 String result=futureTask.get();
相似于 Runnable 接口继承
有返回值接口
能够抛出异常资源
总结:三种方式最终仍是经过 Thread 类对象来真正建立线程的get