创建线程的三种方法 ------ (笔记)
-
继承Thread类
public class Test1 extends Thread { @Override //重写run方法 public void run() { for(int i=0;i<20;i++){ System.out.println("子线程"); } } public static void main(String[] args) { Thread thread = new Test1(); //线程开启不一定立即执行 由CPU进行调度 //调用start方法创建子线程执行 调用run方法都是主线程执行 thread.start(); for(int i=0;i<20;i++){ System.out.println("主线程"); } } }
-
实现Runnable接口 最常用
public class Test1 implements Runnable { @Override public void run() { for(int i=0;i<200;i++){ System.out.println("子线程"); } } public static void main(String[] args) { Thread thread = new Thread(new Test1()); thread.start(); for(int i=0;i<200;i++){ System.out.println("主线程"); } } }
-
实现callable接口,可以捕获抛出异常,可以带返回值
public class Test1 implements Callable<Boolean> { @Override public Boolean call() { for(int i=0;i<10;i++){ System.out.println("子线程"); } return true; } public static void main(String[] args) throws ExecutionException, InterruptedException { Test1 test1 = new Test1(); //线程池 ExecutorService service = Executors.newFixedThreadPool(1); Future<Boolean> future = service.submit(test1); boolean b = future.get(); System.out.println(b); service.shutdownNow(); } }