• 实现多线程(3种方式)


    第一种方式:继承Thread

    1. package com.chang;
    2. public class ThreadDemo1 {
    3. public static void main(String[] args) {
    4. /*
    5. 多线程第一种启动方式:
    6. 1.定义一个类继承Thread
    7. 2.重写run方法
    8. 3.创建子类对象,启动线程
    9. */
    10. MyThread myThread1 = new MyThread();
    11. MyThread myThread2 = new MyThread();
    12. //给线程取个名
    13. myThread1.setName("线程一");
    14. myThread2.setName("线程二");
    15. //开启线程
    16. myThread1.start();
    17. myThread2.start();
    18. }
    19. }
    1. package com.chang;
    2. public class MyThread extends Thread{
    3. @Override
    4. public void run() {
    5. for (int i = 0; i < 100; i++) {
    6. System.out.println(this.getName()+"Hello world!");
    7. }
    8. }
    9. }

    第二种方式:实现Runnable

    1. package com.chang.bao2;
    2. import com.chang.bao1.MyThread;
    3. public class ThreadDemo2 {
    4. public static void main(String[] args) {
    5. /*
    6. 多线程的第二种实现方式:
    7. 1.定义一个类实现Runnable
    8. 2.重写里面的run方法
    9. 3.创建类对象
    10. 4.创建线程(Thread),开启线程
    11. */
    12. //表示多线程要执行的任务
    13. MyRun myRun = new MyRun();
    14. //创建线程,把任务丢给线程
    15. Thread thread1= new Thread(myRun);
    16. Thread thread2= new Thread(myRun);
    17. //给线程起名
    18. thread1.setName("线程1");
    19. thread2.setName("线程2");
    20. //开线程
    21. thread1.start();
    22. thread2.start();
    23. }
    24. }
    1. package com.chang.bao2;
    2. public class MyRun implements Runnable {
    3. @Override
    4. public void run() {
    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. }

     

    第三种方式:利用Callable接口和Future接口实现

    1. package com.chang.bao3;
    2. import java.util.concurrent.ExecutionException;
    3. import java.util.concurrent.FutureTask;
    4. public class ThreadTest {
    5. public static void main(String[] args) throws ExecutionException, InterruptedException {
    6. /*
    7. 多线程实现的第三种方式:
    8. 特点:可以拿到多线程运行的结果
    9. 1.创建一个MyCallable类,实现Callable接口
    10. 2.重写call方法(有返回值,表示多线程运行的结果)
    11. 3.创建MyCallable的对象(表示多线程要执行的任务)
    12. 4.创建FutureTask的对象(管理多线程运行结果)
    13. 5.创建线程对象,启动线程
    14. */
    15. //表示线程要执行的任务
    16. MyCallable myCallable = new MyCallable();
    17. //管理线程运行结果
    18. FutureTask integerFutureTask = new FutureTask(myCallable);
    19. Thread thread = new Thread(integerFutureTask);
    20. thread.start();
    21. Integer result = integerFutureTask.get();
    22. System.out.println("多线程运行结果:"+result);
    23. }
    24. }
    1. package com.chang.bao3;
    2. import java.util.concurrent.Callable;
    3. public class MyCallable implements Callable {
    4. //返回1-100之间的和
    5. @Override
    6. public Integer call() throws Exception {
    7. int sum=0;
    8. for (int i = 1; i <=100; i++) {
    9. sum=sum+i;
    10. }
    11. return sum;
    12. }
    13. }

  • 相关阅读:
    [附源码]JAVA毕业设计衡师社团管理系统(系统+LW)
    将 TiDB 迁移至 Kubernetes
    领域事件和集成事件没那么高大上
    已解决(pandas读取DataFrame列报错)raise KeyError(key) from err KeyError: (‘name‘, ‘age‘)
    面试汇总:这是一份全面&详细的Android面试指南
    【菜鸡读论文】Former-DFER: Dynamic Facial Expression Recognition Transformer
    OpenHarmony 使用Tensorflow Lite
    通过列表里的某些字段进行排序
    android-handler
    Python测网络连通性、能否访问某个网络或者端口号<网络检测、ping主机、测试端口>
  • 原文地址:https://blog.csdn.net/2401_85619378/article/details/140401792