多线程入门01 —— 新线程创建方法
1.直接继承Thread类
-
代码示例
package com.pbx.lesson01; /** * @author BruceXu * @date 2020/9/13 */ public class ThreadDemo01 extends Thread { public static void main(String[] args) { // 创建一个线程对象,并通过start方法开启该线程 ThreadDemo01 thread = new ThreadDemo01(); thread.start(); for (int i = 0; i < 20; i++) { System.out.println(i + "-->我在学习"); } } @Override public void run() { // 线程体需要执行的动作 for (int i = 0; i < 20; i++) { System.out.println(i + "-->我在玩手机"); } } }
-
执行结果
从结果中可以看到,main线程和子线程在交替执行
- 存在多个线程时,执行那个线程完全取决于CPU
2.实现runnable接口
-
代码示例
package com.pbx.lesson01; /** * @author BruceXu * @date 2020/9/13 */ public class ThreadDemo02 implements Runnable { @Override public void run() { for (int i = 0; i < 20; i++) { System.out.println(i+"-->我在玩手机"); } } public static void main(String[] args) { new Thread(new ThreadDemo02()).start(); for (int i = 0; i < 20; i++) { System.out.println(i + "-->我在学习"); } } }
-
执行结果
3.实现callable接口
-
代码示例
package com.pbx.lesson01; import java.util.concurrent.*; /** * @author BruceXu * @date 2020/9/13 */ public class ThreadDemo03 implements Callable<String> { private final String name; public ThreadDemo03(String name) { this.name = name; } public static void main(String[] args) throws ExecutionException, InterruptedException { ThreadDemo03 t1 = new ThreadDemo03("张三"); ThreadDemo03 t2 = new ThreadDemo03("李四"); ThreadDemo03 t3 = new ThreadDemo03("王五"); // 1.创建执行服务 ExecutorService service = Executors.newFixedThreadPool(3); // 2.提交执行 Future<String> r1 = service.submit(t1); Future<String> r2 = service.submit(t2); Future<String> r3 = service.submit(t3); // 3.获取结果 System.out.println(r1.get()); System.out.println(r2.get()); System.out.println(r3.get()); // 4.关闭服务 service.shutdown(); } @Override public String call() throws Exception { for (int i = 0; i < 10; i++) { System.out.println(name + ":" + i + "-->在学习"); } return name + "在学习"; } }
-
执行结果