implements Runnable与extends Thread 的区别

简介: implements Runnable与extends Thread 的区别

分别写了两种方式的线程,代码如下

public class Threadaaa {
  public static void main(String args[]) throws Exception {
    // 多线程共享一个对象
    ImplementsRunnable rc = new ImplementsRunnable();
    Thread t1 = new Thread(rc);
    t1.start();
    Thread.sleep(2000); // 在开启下个线程前先等待2秒
    Thread t2 = new Thread(rc);
    t2.start();
    Thread.sleep(2000); // 在开启下个线程前先等待2秒
    Thread t3 = new Thread(rc);
    t3.start();
    Thread.sleep(2000); // 在开启下个线程前先等待2秒
    Thread t4 = new Thread(rc);
    Thread.sleep(2000); // 在开启下个线程前先等待2秒
    t4.start();
    // 为每一个线程创造新的实例
    ExtendsThread tc1 = new ExtendsThread();
    tc1.start();
    Thread.sleep(2000); // 在开启下个线程前先等待2秒
    ExtendsThread tc2 = new ExtendsThread();
    tc2.start();
    Thread.sleep(2000); // 在开启下个线程前先等待2秒
    ExtendsThread tc3 = new ExtendsThread();
    tc3.start();
    Thread.sleep(2000); // 在开启下个线程前先等待2秒
    ExtendsThread tc4 = new ExtendsThread();
    tc4.start();
  }
}
class ImplementsRunnable implements Runnable {
  private int counter = 4;
  public void run() {
    counter--;
    System.out.println("ImplementsRunnable : Counter : " + counter);
  }
}
class ExtendsThread extends Thread {
  private int counter = 4;
  public void run() {
    counter--;
    System.out.println("ExtendsThread : Counter : " + counter);
  }
}

运行结果如下:

ImplementsRunnable : Counter : 3
ImplementsRunnable : Counter : 2
ImplementsRunnable : Counter : 1
ImplementsRunnable : Counter : 0
ExtendsThread : Counter : 3
ExtendsThread : Counter : 3
ExtendsThread : Counter : 3
ExtendsThread : Counter : 3


我分别为两个线程分配了资源为4,实现Runnable这个接口,它可以实现共享资源,每次获取剩下的资源,继续操作,而继承Thread类,你必须为每一个线程创建不同的实例。因此每个类的实例分配了不同的内存空间,每一个有不同的资源,它们的值相同。因为没有一个对象的引用是相同的。

相关文章
|
6月前
|
消息中间件 Kubernetes NoSQL
c++11 关键字 override 与 final
c++11 关键字 override 与 final
|
5月前
|
Java
揭秘!为何Java多线程中,继承Thread不如实现Runnable?
【6月更文挑战第19天】在Java多线程中,实现`Runnable`比继承`Thread`更佳,因Java单继承限制,`Runnable`可实现接口复用,便于线程池管理,并分离任务与线程,提高灵活性。当需要创建线程或考虑代码复用时,实现`Runnable`是更好的选择。
46 0
|
6月前
|
PHP
PHP public、protected、private、static、abstract、final、interface、implements 区别对比
PHP public、protected、private、static、abstract、final、interface、implements 区别对比
76 0
runnable 和 callable 有什么区别
runnable 和 callable 有什么区别
synchronized(this)、synchronized(class)和synchronized(Object)的区别
synchronized(this)、synchronized(class)和synchronized(Object)的区别
121 0
synchronized(this)、synchronized(class)和synchronized(Object)的区别
|
Java
Java 权限修饰符(private、protected、public、默认、final、static)
Java 权限修饰符(private、protected、public、默认、final、static)
177 0
|
Java
runnable 和 callable 有什么区别
Runnable和Callable都是用于实现多线程的接口,区别在于返回结果、异常处理、阻塞和结果处理等方面。选择使用Runnable还是Callable取决于任务的需求和场景。
260 0
|
设计模式 Java 开发者
Thread 与 Runnable 关系 | 学习笔记
快速学习 Thread 与 Runnable 关系。
Thread 与 Runnable 关系 | 学习笔记
|
Web App开发 自然语言处理 C++
学习C++,学习类,那override和final你用过没?
学习C++,学习类,那override和final你用过没?
106 0
学习C++,学习类,那override和final你用过没?