线程的创建方式:
1、线程继承Thread类,通过该对象的start()方法启动线程
2、线程实现Runnable接口,通过往Thread类构造传入Runnable对象,thread.start()启动线程。
3、线程实现Callable接口。Callable相当于run方法有返回值的Runnable,与Future结合使用(接收返回值使用Future)。
使用过的例子:
package thread;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;/** * @author zhen * @Date 2018/11/14 10:43 */public class TestThread { public static void main(String[] args) throws ExecutionException, InterruptedException { FutureTaskfuture = new FutureTask<>(new T3()); new Thread(future).start(); if (future.get() != ""){ System.out.println(future.get()); } }}class T1 extends Thread{ @Override public void run() { System.out.println(1); }}class T2 implements Runnable{ @Override public void run() { }}class T3 implements Callable { @Override public String call() throws Exception { return "hello"; }}
线程池的使用,为什么使用线程池?
复用线程,使用工作队列,避免无限制创建线程。重用线程降低开销,请求到达时,线程已存在,减少创建线程的等待时间,提高响应性。