方式一、继承Thread类
package com.fyd; public class Test01 { public static void main(String[] args) { new Thread001().start(); } } class Thread001 extends Thread { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(i); } } }
方式二、实现Runnable接口
package com.fyd; public class Test02 { public static void main(String[] args) { new Thread(new Thread002()).start(); } } class Thread002 implements Runnable { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(i); } } }
方式三、实现Callable
package com.fyd; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class Test03 { public static void main(String[] args) { try { FutureTask futureTask=new FutureTask(new Thread003()); futureTask.run(); System.out.println(futureTask.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } } class Thread003 implements Callable { @Override public Object call() throws Exception { int j=100; for (int i = 0; i < 10; i++) { System.out.println(i); } return j; } }
方法四、使用线程池
package com.fyd; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Test04 { public static void main(String[] args) { //创建一个定长的线程池 ExecutorService executorService = Executors.newFixedThreadPool(5); //创建一个可以缓存的线程池会回收线程,如果没有可回收,就创建 ExecutorService executorService1 = Executors.newCachedThreadPool(); //创建一个单线程的线程池 ExecutorService executorService3 = Executors.newSingleThreadScheduledExecutor(); //创建一个线程池,该线程池可以调度在给定延迟之后运行的命令,或者定期执行命令。 ExecutorService executorService4 = Executors.newScheduledThreadPool(5); } }