zoukankan      html  css  js  c++  java
  • Java多线程的几种实现方法

    1. 继承Thread类
    public class MyThread extends Thread {  
      public void run() {  
       System.out.println("MyThread.run()");
      }  
    }  
    public static void main(String [] args ){
    MyThread myThread1 = new MyThread();  
    MyThread myThread2 = new MyThread();  
    myThread1.start();  
    myThread2.start();
    }
    
    1. 实现Runable接口
    public class MyThread extends OtherClass implements Runnable {  
      public void run() {  
       System.out.println("MyThread.run()");  
      }  
      public static void main(String[] args){
      MyThread myThread = new MyThread();  
            Thread thread = new Thread(myThread);  //实例化Thread传入Runable target
             thread.start();  
      }
    }  
    
    

    事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:

    public void run() {  
      if (target != null) {  
       target.run();  
      }  
    }  
    

    实现Runnable接口相对于扩展Thread类来说,具有很大的优势。这种方式不仅有利于程序的健壮性,使代码能够被多个线程共享,而且代码和数据资源相对独立,从而特别适合多个具有相同代码的线程去处理同一资源的情况。
    后面两种情况不常用:
    3. 实现Callable接口通过FutureTask包装器来创建Thread线程。

    实现Callable接口,新建当前类对象,再新建FutureTask类对象时传入当前类对象,接着新建Thread类对象时传入FutureTask类对象,最后运行Thread对象的start()方法新建当前类对象。

    4.使用ExecutorService、Callable、Future实现有返回结果的多线程。

  • 相关阅读:
    面向过程编程
    生成器
    迭代器
    装饰器
    函数对象与闭包
    名称空间和作用域
    Django中的as_view方法源码分析
    DRF3序列化反序列化
    DRF4级联与外键字段
    django--BBS项目,后端业务逻辑整理
  • 原文地址:https://www.cnblogs.com/jiaorenzhan/p/10623950.html
Copyright © 2011-2022 走看看