Java JUC&多线程 底子完整版

打印 上一主题 下一主题

主题 892|帖子 892|积分 2676

Java JUC&多线程 底子完整版


目录

1、 多线程的第一种启动方式之继承Thread类

优点: 比较简朴,可以直接使用Thread类中的方法,缺点: 可以拓展性比较差,不能再继承其他的类
线程类MyThread
  1. public class MyThread extends Thread {
  2.     @Override
  3.     public void run() {
  4.         for (int i = 0; i < 100; i++) {
  5.             System.out.println(getName() + "Hello World");
  6.         }
  7.     }
  8. }
复制代码
执行类ThreadDemo
  1. public class ThreadDemo {
  2.     public static void main(String[] args) {
  3.         /*
  4.          * 多线程第一种启动方式
  5.          * 1. 自己定义一个类继承Thread
  6.          * 2. 重写run方法
  7.          * 3. 创建启动对象,并启动线程
  8.          */
  9.         MyThread t1 = new MyThread();
  10.         MyThread t2 = new MyThread();
  11.         t1.setName("线程1");
  12.         t2.setName("线程2");
  13.         t1.start();
  14.         t2.start();
  15.     }
  16. }
复制代码
2、多线程的第二种启动方式之实现Runnable接口

优点: 拓展性强,实现该接口的同时可以继承其他的类,缺点: 相对复杂,不能直接使用Thread类中的方法
线程类MyRunnable
  1. public class MyRunnable implements Runnable {
  2.     @Override
  3.     public void run() {
  4.         // 线程要执行的代码
  5.         for (int i = 0; i < 100; i++) {
  6.             // 先获取当前线程的对象
  7.             Thread thread = Thread.currentThread();
  8.             System.out.println(thread.getName() + "Hello World");
  9.         }
  10.     }
  11. }
复制代码
执行类ThreadDemo
  1. public class ThreadDemo {
  2.     public static void main(String[] args) {
  3.         /*
  4.          * 多线程的第二种启动方式
  5.          * 1. 自定义一个类实现Runnable接口
  6.          * 2. 重写里面的run方法
  7.          * 3. 创建自己的类对象
  8.          * 4.创建一个Thread类的对象,并开启线程
  9.          *
  10.          */
  11.         // 任务对象
  12.         MyRunnable myRun = new MyRunnable();
  13.         // 线程对象
  14.         Thread t1 = new Thread(myRun);
  15.         Thread t2 = new Thread(myRun);
  16.         // 给线程设置名字
  17.         t1.setName("线程1");
  18.         t2.setName("线程2");
  19.         // 开启线程
  20.         t1.start();
  21.         t2.start();
  22.     }
  23. }
复制代码
3、多线程的第三种实现方式之实现Callable接口

优点: 拓展性强,实现该接口的同时可以继承其他的类,相对复杂,不能直接使用Thread类中的方法
线程类MyCallable
  1. public class MyCallable implements Callable<Integer> {
  2.     @Override
  3.     public Integer call() throws Exception {
  4.         // 求1~100之间的和
  5.         int sum = 0;
  6.         for (int i = 0; i <= 100; i++) {
  7.             sum = sum + i;
  8.         }
  9.         return sum;
  10.     }
  11. }
复制代码
例子,MyThreadPoolDemo1
  1. public class ThreadDemo {
  2.     public static void main(String[] args) throws ExecutionException, InterruptedException {
  3.         /*
  4.          * 多线程的第三种实现方式
  5.          *   特点: 可以获取到多线程的运行结果
  6.          *  1. 创建一个MyCallable类实现Callable接口
  7.          *  2. 重写call (是有返回值的,表示多线程运行的结果)
  8.          *  3. 创建MyCallable的对象 (表示多线程要执行的任务)
  9.          *  4. 创建FutureTask的对象 (管理多线程运行的结果)
  10.          *  5. 创建Thread类的对象 并启动(表示线程)
  11.          */
  12.         // 创建MyCallable对象 (表示要执行的多线程的任务)
  13.         MyCallable mc = new MyCallable();
  14.         // 创建FutureTask的对象 (作用管理多线程运行的结果)
  15.         FutureTask<Integer> ft = new FutureTask<>(mc);
  16.         // 创建线程对象
  17.         Thread t1 = new Thread(ft);
  18.         // 启动线程
  19.         t1.start();
  20.         // 获取多线程运行的结果
  21.         Integer result = ft.get();
  22.         System.out.println(result);
  23.     }
  24. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

熊熊出没

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表