• 实现多线程的三种方法:Thread、Runnable和Callable


    • 继承Thread类,重写run()方法

    步骤: (1) 定义类继承Thread类

              (2) 复写Thread类中的run方法。

              (3) 调用线程的start方法

                   (start方法有两种含义:1. 启动多线程。2. 调用线程中的run方法)

    public class MyThread{
     public static void main(String args[]){
        DemoThread dt = new DemoThread();
        dt.start();   //用于启动线程,并自动执行run方法。
        dt.run();     //只是单纯的对象调用,在主线程中执行,并不开启子线程。
        for(int i=0;i<50;i++){
          System.out.println("main run-----"+i);
        }
     }
    }
    class DemoThread extends Thread{
      public void run(){
        for(int i=0;i<50;i++)
          System.out.println("demo run-----"+i);
        }
    }
    • 实现Runnable接口,并实现该接口的run()方法

    步骤:(1) 创建类实现Runnable接口

             (2) 实现Runnable接口中的run方法

             (3) 创建Thread对象

             (4) 将Runnable对象作为实际参数传递给Thread的构造方法

             (5) 调用Thread类的start方法,自动执行Runnable对象中的run方法

          

     1 public class MyRunable{
     2  public static void main(String args[]){
     3     DemoRunnable dr = new DemoRunnable();
     4     Thread t1 = new Thread(dr);
     5     Thread t2 = new Thread(dr);
     6     Thread t3 = new Thread(dr);
     7     Thread t4 = new Thread(dr);
     8     t1.start();
     9     t2.start();
    10     t3.start();
    11     t4.start();
    12  }
    13 }
    14 class DemoRunnable implements Runnable{
    15   private int ticket=100;
    16   public void run(){
    17     while(true){
    18       if(ticket>0)
    19         System.out.println(Thread.currentThread().getName()+"--售票:"+ticket--);
    20       }
    21     }
    22 }
    • 实现Callable接口,重写call()方法

           Callable接口与Runnable接口的功能类似,但提供了比Runnable接口更强大的功能。

    面试: 继承方式与实现方式有什么区别?

             (1) 避免了单继承的局限性

             (2) 多线程执行代码位置不同

                   继承Thread类:代码存放在Thread类的run方法中

                   实现Runnable类:代码存放在Runnable接口的run方法中。

    面试:Callable与Runnable对比?

            (1) Callable可以在任务结束后提供一个返回值,而Runnable无法提供这个功能

            (2) Callable中的call()方法可以抛出异常,而Runnable中的run()方法不能抛出异常

            (3) 运行Callable可以拿到一个Future对象,Future对象表示异步计算的结果,它提供了检查计算是否完成的方法。

  • 相关阅读:
    斯特林数
    JAVA substring截取报错java.lang.StringIndexOutOfBoundsException: String index out of range:
    大爽Python入门教程 2-2 序列: 字符串、元组与列表
    大爽Python入门教程 2-3 字符串,列表,字典
    大爽Python入门教程 2-4 练习
    大爽Python入门教程 2-1 认识容器
    JS 树形结构 根据子节点找到所有上级
    kafka扩容和分区重新分配
    Kafka 常用命令总结
    kafka的groupid
  • 原文地址:https://www.cnblogs.com/jiqianqian/p/6565322.html
Copyright © 2020-2023  润新知