创建线程有哪几种方式?
①. 继承Thread类创建线程类 步骤:继承Thread类;重写run方法;创建子类对象调用start方法
class MyThread extends Thread { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(getName()+":正在执行!"+i); } } } new MyThread().start();
②. 通过Runnable接口创建线程类 步骤:实现Runnable接口;重写run方法;new Thread(自定义类对象);调用start方法 实现Runnable接口,可以避免继承Thread类的单继承局限性,并且可以解耦,所以优先使用该方式
class TestRunnable implements Runnable { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(“当前线程为:” + Thread.currentThread()); } } } Thread t1 = new Thread(new TestRunnable()); t1.start();
③. 通过Callable和FutureTask创建线程 实现Callable接口,重写call方法
创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。 创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。 使用FutureTask对象作为Thread对象的target创建并启动新线程。 调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。 public static void main(String[] args) { CallableDemo callableDemo = new CallableDemo(); try { FutureTask result = new FutureTask<>(callableDemo); new Thread(result).start(); System.out.println(result.get()); } catch (Exception e) { e.printStackTrace(); } } class CallableDemo implements Callable { @Override public Integer call() throws Exception { int sum = 0; for (int i = 0; i < 10; i++) { sum += i; System.out.println(“当前线程为:” + Thread.currentThread()); } return sum; } }
相关方法: 获取当前线程名称:getName() 获取当前线程对象:currentThread() 返回当前线程对象的优先级:getPriority() 线程的优先级范围是从1 ~ 10,默认为5 精简版创建线程方式:
new Thread(){ public void run() { }; }.start(); Runnable a = new Runnable() { @Override public void run() {} }; new Thread(a).start();
