1)继承thread
public class ThreadTest1 { public static void main(String[] args) { System.out.println("main...开始了"); Thread01 thread01 = new Thread01(); thread01.start(); System.out.println("main...结束了");
}
public static class Thread01 extends Thread{ @Override public void run() { System.out.println("当前线程:" + Thread.currentThread().getId()); int i = 10 / 2; System.out.println("运行结果:" + i); } } }
2)实现Runnable
public class ThreadTest1 { public static void main(String[] args) { System.out.println("main...开始了"); Runable01 runable01 = new Runable01(); new Thread(runable01).start(); System.out.println("main...结束了"); } public static class Runable01 implements Runnable{ @Override public void run() { System.out.println("当前线程:" + Thread.currentThread().getId()); int i = 10 / 2; System.out.println("运行结果:" + i); } } }
3)实现Callable接口+FutureTask(可以拿到返回结果,可以处理线程)
public class ThreadTest1 { public static void main(String[] args) throws ExecutionException, InterruptedException { FutureTask<Integer> futureTask = new FutureTask<>(new Callable01()); new Thread(futureTask).start(); //阻塞等待整个线程执行完成,获取返回结果 Integer integer = futureTask.get(); System.out.println("main...结束了..."+integer);
}
public static class Callable01 implements Callable<Integer>{ @Override public Integer call() throws Exception { System.out.println("当前线程:" + Thread.currentThread().getId()); int i = 10 / 2; System.out.println("运行结果:" + i); return i; } }
}
4)线程池(给线程池直接提交任务)
public class ThreadTest { public static ExecutorService executor = Executors.newFixedThreadPool(10); public static void main(String[] args) throws ExecutionException, InterruptedException { service.execute(new Runable01()); } public static class Runable01 implements Runnable { @Override public void run() { System.out.println("当前线程:" + Thread.currentThread().getId()); int i = 10 / 2; System.out.println("运行结果:" + i); } }
}
线程池可以控制资源,性能稳定