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

猜你喜欢

转载自blog.csdn.net/weixin_39175589/article/details/88043380