• 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实现有返回结果的多线程。

  • 相关阅读:
    Mybatis学习总结(五)——动态sql
    1006 换个格式输出整数(15分)
    1005 继续(3n+1)猜想(25分) *
    1004 成绩排名(20分)
    1003 我要通过!(20分)*
    1002 写出这个数(20分) *
    1001 害死人不偿命的(3n+1)猜想(15分)
    CCSP 201312-2 ISBN号码
    CCSP201312-1出现次数最多的数
    c++动态定义数组
  • 原文地址:https://www.cnblogs.com/jiaorenzhan/p/10623950.html
Copyright © 2020-2023  润新知