Java实现多线程的两种方式讲解

本文详细对比了Java中实现多线程的两种主要方式:继承Thread类与实现Runnable接口。通过具体代码示例,展示了这两种方式在创建线程、资源共享及扩展性方面的差异。
ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

1、两种方式

      继承Thread和实现Runnable接口

      a、Runnable 是一个接口,该接口中只包含了一个run()方法。我们可以定义一个类A实现Runnable接口;然后,通过new Thread(new A())等方式新建线程,通过这种方式创建出来的多个线程共享A类对象的数据。它的定义如下:

      public interface Runnable { 
        public abstract void run(); 
      }

     b、Thread 是一个类。Thread本身就实现了Runnable接口。它的声明如下:

          public class Thread implements Runnable {}

2、两种方式的比较

(1)相同点:都是“多线程的实现方式”。
(2)不同点:
      a、Thread 是类,而Runnable是接口

      b、Thread本身是实现了Runnable接口的类。我们知道“一个类只能有一个父类,但是却能实现多个接口”,因此Runnable具有更好的扩展性。
      c、此外,Runnable还可以用于“资源的共享”。即,多个线程都是基于某一个Runnable对象建立的,它们会共享Runnable对象上的资源。通常,建议通过“Runnable”实现多线程!

3、Thread方式创建线程

public class ThreadTest {
    public static void main(String[] args) {
        ThreadWay t1 = new ThreadWay();
        ThreadWay t2 = new ThreadWay();
        ThreadWay t3 = new ThreadWay();
        t1.start();
        t2.start();
        t3.start();
    }
}

class ThreadWay extends Thread{
    private int ticket=5;
    public void run(){
        for(int i = 0; i < 10; i++){
            if(this.ticket > 0){
                System.out.println(Thread.currentThread().getName() + " 卖票:ticket"+this.ticket--);
            }
        }
    }
}

输出结果:

Thread-0 卖票:ticket5
Thread-1 卖票:ticket5
Thread-2 卖票:ticket5
Thread-1 卖票:ticket4
Thread-0 卖票:ticket4
Thread-1 卖票:ticket3
Thread-2 卖票:ticket4
Thread-2 卖票:ticket3
Thread-2 卖票:ticket2
Thread-2 卖票:ticket1
Thread-1 卖票:ticket2
Thread-0 卖票:ticket3
Thread-0 卖票:ticket2
Thread-1 卖票:ticket1
Thread-0 卖票:ticket1

分析:

(1) ThreadWay 继承于Thread,它是自定义个线程。每个ThreadWay 都会卖出5张票。
(2) 主线程main创建并启动3个ThreadWay子线程。每个子线程都各自卖出了5张票。

4、Runnable方式创建线程

public class ThreadTest {
    public static void main(String[] args) {
        ThreadWay t = new ThreadWay();
        Thread t1 = new Thread(t);
        Thread t2 = new Thread(t);
        Thread t3 = new Thread(t);
        t1.start();
        t2.start();
        t3.start();
    }
}

class ThreadWay implements Runnable{
    private int ticket=5;
    public void run(){
        for(int i = 0; i < 10; i++){
            if(this.ticket > 0){
                System.out.println(Thread.currentThread().getName() + " 卖票:ticket"+this.ticket--);
            }
        }
    }
}

输出结果:

Thread-1 卖票:ticket4
Thread-0 卖票:ticket5
Thread-2 卖票:ticket3
Thread-0 卖票:ticket1
Thread-1 卖票:ticket2

分析:
(1) 和上面“ThreadWay 继承于Thread”不同;这里的ThreadWay 实现了Runnable接口。
(2) 主线程main创建并启动3个子线程,而且这3个子线程都是基于“mt这个Runnable对象”而创建的。运行结果是这3个子线程一共卖出了5张票。这说明它们是共享了ThreadWay 接口的。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值