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类,你必须为每一个线程创建不同的实例。因此每个类的实例分配了不同的内存空间,每一个有不同的资源,它们的值相同。因为没有一个对象的引用是相同的。

相关文章
|
5月前
|
PHP
PHP public、protected、private、static、abstract、final、interface、implements 区别对比
PHP public、protected、private、static、abstract、final、interface、implements 区别对比
33 0
|
1月前
|
Java
java-基础-Interface、abstract类、Static class 、non static class的区别
【4月更文挑战第5天】Java中的接口、抽象类、静态类和非静态类各具特色:接口仅含抽象方法和常量,用于定义行为规范;抽象类可包含抽象和非抽象方法,提供部分实现,支持多继承;静态内部类不依赖外部类实例,可独立存在,访问外部类的静态成员;非静态内部类持有关联外部类引用,能访问其所有成员。这些机制根据设计需求和场景选择使用。
14 6
runnable 和 callable 有什么区别
runnable 和 callable 有什么区别
|
9月前
|
Java
Java 权限修饰符(private、protected、public、默认、final、static)
Java 权限修饰符(private、protected、public、默认、final、static)
118 0
|
10月前
|
Java
runnable 和 callable 有什么区别
Runnable和Callable都是用于实现多线程的接口,区别在于返回结果、异常处理、阻塞和结果处理等方面。选择使用Runnable还是Callable取决于任务的需求和场景。
154 0
|
设计模式 Java 开发者
Thread 与 Runnable 关系 | 学习笔记
快速学习 Thread 与 Runnable 关系。
Thread 与 Runnable 关系 | 学习笔记
|
Web App开发 自然语言处理 C++
学习C++,学习类,那override和final你用过没?
学习C++,学习类,那override和final你用过没?
84 0
学习C++,学习类,那override和final你用过没?
Callable中call方法和Runnable中run方法的区别
Callable中call方法和Runnable中run方法的区别
163 0
Callable中call方法和Runnable中run方法的区别
|
索引 存储 Java