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