别再说继承Thread类不适合共享资源了,这种方式和实现Runnable接口是一样的!

前言

最近再看多线程,关于多线程的实现方式上,我发现大多是帖子都是有些问题的。具体表现在证明继承Thread类和实现Runnable接口两种实现方式对资源共享的区别上。

先说结论(我认为这个是错误的)

大部分帖子都认为继承Thread类不适合资源共享,所以需要用实现Runnable接口的方式。一般都是用卖票的例子还说明,我随便找了一篇然后贴在这里:
实现Runnable接口方式
继承Thread类方式
然后贴出的运行结果无非是实现Runnable接口的三个线程共卖10张票,继承Thread类的线程则是每个线程卖10张,共卖30张票。这个代码真的能得出这个结论吗?

**当然不能!当然不能!当然不能!**最基本的控制变量法的条件都不满足,好多东西不一样,这种代码的验证方式一点也不严谨。不严谨的验证方式得出的结论也当然是不科学的。真不知道最原始的帖子是从哪来的,而且好多好多帖子都是这种结论。

接下来我们看看正确的验证方法

备注:本文不涉及线程安全,所以没有加同步锁,我也是特意截取的线程不安全的运行结果

方式一 继承Thread类

/**
继承Thread类
*/
public class MyThread extends Thread{
   
	//定义两个成员变量
    private int ticket=100;
    private String name;
    @Override
    public void run() {
   
        while(ticket > 0){
   
            System.out.println(ticket-- + "张票已被售卖,售卖窗口为" + Thread.currentThread().getName());
        }
    }

    public static 
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
当我们使用实现 Runnable 接口方式创建线程时,一个重要的优势是可以避免由于 Java 不支持多继承而带来的问题。举个例子,假设我们要创建一个类,它需要既能继承某个类又需要实现多线程,这时候就存在一个问题:Java 不支持多继承,我们无法同时继承 Thread 类和其他类。但是,如果我们使用实现 Runnable 接口方式,就可以避免这个问题。 另一个优势是可以实现资源共享,多个线程可以共享同一个 Runnable 对象。比如,假设我们要编写一个程序,计算 1 到 100 的和。我们可以创建一个 Runnable 对象,让多个线程共享这个对象,并分别计算一部分的和,最后将结果合并即可。这样可以提高程序的效率,避免资源浪费。 下面是使用实现 Runnable 接口方式创建线程的示例代码: ```java public class MyRunnable implements Runnable { public void run() { // 线程执行的代码 } } public class Main { public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); Thread thread1 = new Thread(myRunnable); Thread thread2 = new Thread(myRunnable); thread1.start(); thread2.start(); } } ``` 在这个例子中,MyRunnable实现Runnable 接口,并重写了 run() 方法。在 main() 方法中,我们创建了两个 Thread 对象,并将 MyRunnable 对象作为参数传递给它们。这样,两个线程就共享了同一个 MyRunnable 对象,可以执行相同的代码。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值