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 接口的。

Java实现多线程的两种方式讲解相关推荐

  1. Java实现多线程的两种方式

    认识多线程之前,我们先要了解几个关于多线程有关的概念. A:进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. B:线程 ...

  2. 多线程基础-实现多线程的两种方式(二)

    实现多线程的两种方式: 1.实现Runnable public interface Runnable {public abstract void run(); }// RunnableTest.jav ...

  3. 创建和应用Java包文件的两种方式(转)

    创建和应用Java包文件的两种方式(转) <Java编程艺术>章节选登.作者:高永强 清华大学出版社 (即将出版) 12.1  包--package    ... 12.1.1  包命名规 ...

  4. java制作oracle程序,Java程序操作Oracle两种方式之简单实现

    Java程序操作Oracle两种方式之简单实现 1.通过JDBC-ODBC桥连接Oracle数据库 (1)创建odbc源,在控制面板->管理工具->数据源(odbc)中添加DSN,比如取名 ...

  5. Java 实现抽奖的两种方式

    Java实现抽奖的两种方式 方式一:随机数在哪个区间内返回区间下标 方式二:随机数加入区间点集合排序返回随机数下标 代码示例: ①抽奖入参类型为BigDecimal: package com.cfay ...

  6. Java格式化倒计时的两种方式

    Java格式化倒计时的两种方式 第一种方式 /*** 入参是一个每秒减小1的秒数* 返回一个格式化的时间* * 该方法具有局限性,他在时间大于1个小时的时候,会返回错误的时间* 因为该方法调用了Dat ...

  7. java操作Excel有两种方式 方式1:jxl操作Excel jxl的API

    java操作Excel有两种方式 方式1:jxl操作Excel 方式2:poi操作Excel 下面介绍jxl API: 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用 ...

  8. Java 实现多线程的四种方式 超详细

    Java 实现多线程的四种方式 文章目录 Java 实现多线程的四种方式 一.继承 Thread 类 二.实现 Runnable 接口 三.实现 Callable 接口 四.线程池 1,Executo ...

  9. java 产生随机数的两种方式,Java产生随机数的两种方式

    Java产生随机数的两种方式 Java产生随机数的两种方式 在java中,我们可以通过两种方式来获取随机数(generating a random number)一种是大家熟悉的java.lang.M ...

最新文章

  1. (原創) 如何讓Linux開機時,不要在圖形介面顯示開機訊息? (OS) (Linux) (CentOS)
  2. 文件输入输出和string流
  3. 【数据库】关系型数据库优化操作
  4. java判断实例_java判断类和实例的关系
  5. 69 session和cookie的区别
  6. 京东抢购机器人_戴森、科沃斯、SKG...超多大牌低价秒杀!京东电器等你来
  7. 服务器系统性能计数器,MSRS 2008 Windows Service 性能对象的性能计数器
  8. SPS:设置访问群体
  9. java基础——自动装箱与拆箱
  10. 写好数学建模竞赛论文的那些事
  11. 2022年电子邮箱哪个好用?邮箱大全测评来了,请及时查看哦
  12. 字节跳动实习 视频面试
  13. gmail 设置 smtp_如何在Linux上使用Gmail或SMTP设置电子邮件警报
  14. 怎么创建网站?创建网站流程分享
  15. 2021年隐私和安全性最佳的8款Linux手机
  16. oppo小布机器人_oppo小布小布没反应
  17. 电脑桌面的文件突然不见了怎么办
  18. JAVA如何利用迅雷接口解析磁力,关于神秘代码(磁力链接)如何正确使用
  19. mysql5.7无损复制_MySQL5.7新特性:lossless replication 无损复制
  20. 解决win10下安装typescript后仍报“tsc不是内部或外部命令...”的问题

热门文章

  1. 代刷网html统计代码,【QQ代刷网】前台代码大全
  2. (P4-P8)多线程,线程池
  3. 计算机组成的分析指令的op,计算机组成原理-第12讲(第4章).ppt
  4. cloud-init 典型应用 - 每天5分钟玩转 OpenStack(174)
  5. 在你的app里加入广告
  6. 立创开源丨基于GD32E230C8T6芯片的开发评估板
  7. linux自动网络对时
  8. mini2440裸机音乐播放器(非常久曾经的笔记)
  9. Java_输入输出(Scanner)
  10. 【原创】技术员 Ghost Win7 Sp1 x64 纯净版 2017