Java JUC&多线程 底子完整版
目录
1、 多线程的第一种启动方式之继承Thread类
优点: 比较简朴,可以直接使用Thread类中的方法,缺点: 可以拓展性比较差,不能再继承其他的类
线程类MyThread- public class MyThread extends Thread {
- @Override
- public void run() {
- for (int i = 0; i < 100; i++) {
- System.out.println(getName() + "Hello World");
- }
- }
- }
复制代码 执行类ThreadDemo- public class ThreadDemo {
- public static void main(String[] args) {
- /*
- * 多线程第一种启动方式
- * 1. 自己定义一个类继承Thread
- * 2. 重写run方法
- * 3. 创建启动对象,并启动线程
- */
- MyThread t1 = new MyThread();
- MyThread t2 = new MyThread();
- t1.setName("线程1");
- t2.setName("线程2");
- t1.start();
- t2.start();
- }
- }
复制代码 2、多线程的第二种启动方式之实现Runnable接口
优点: 拓展性强,实现该接口的同时可以继承其他的类,缺点: 相对复杂,不能直接使用Thread类中的方法
线程类MyRunnable- public class MyRunnable implements Runnable {
- @Override
- public void run() {
- // 线程要执行的代码
- for (int i = 0; i < 100; i++) {
- // 先获取当前线程的对象
- Thread thread = Thread.currentThread();
- System.out.println(thread.getName() + "Hello World");
- }
- }
- }
复制代码 执行类ThreadDemo- public class ThreadDemo {
- public static void main(String[] args) {
- /*
- * 多线程的第二种启动方式
- * 1. 自定义一个类实现Runnable接口
- * 2. 重写里面的run方法
- * 3. 创建自己的类对象
- * 4.创建一个Thread类的对象,并开启线程
- *
- */
- // 任务对象
- MyRunnable myRun = new MyRunnable();
- // 线程对象
- Thread t1 = new Thread(myRun);
- Thread t2 = new Thread(myRun);
- // 给线程设置名字
- t1.setName("线程1");
- t2.setName("线程2");
- // 开启线程
- t1.start();
- t2.start();
- }
- }
复制代码 3、多线程的第三种实现方式之实现Callable接口
优点: 拓展性强,实现该接口的同时可以继承其他的类,相对复杂,不能直接使用Thread类中的方法
线程类MyCallable- public class MyCallable implements Callable<Integer> {
- @Override
- public Integer call() throws Exception {
- // 求1~100之间的和
- int sum = 0;
- for (int i = 0; i <= 100; i++) {
- sum = sum + i;
- }
- return sum;
- }
- }
复制代码 例子,MyThreadPoolDemo1- public class ThreadDemo {
- public static void main(String[] args) throws ExecutionException, InterruptedException {
- /*
- * 多线程的第三种实现方式
- * 特点: 可以获取到多线程的运行结果
- * 1. 创建一个MyCallable类实现Callable接口
- * 2. 重写call (是有返回值的,表示多线程运行的结果)
- * 3. 创建MyCallable的对象 (表示多线程要执行的任务)
- * 4. 创建FutureTask的对象 (管理多线程运行的结果)
- * 5. 创建Thread类的对象 并启动(表示线程)
- */
- // 创建MyCallable对象 (表示要执行的多线程的任务)
- MyCallable mc = new MyCallable();
- // 创建FutureTask的对象 (作用管理多线程运行的结果)
- FutureTask<Integer> ft = new FutureTask<>(mc);
- // 创建线程对象
- Thread t1 = new Thread(ft);
- // 启动线程
- t1.start();
- // 获取多线程运行的结果
- Integer result = ft.get();
- System.out.println(result);
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |