Java实现多线程的两种方式讲解
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 |
分析:
(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 |
分析:
(1) 和上面“ThreadWay 继承于Thread”不同;这里的ThreadWay 实现了Runnable接口。
(2) 主线程main创建并启动3个子线程,而且这3个子线程都是基于“mt这个Runnable对象”而创建的。运行结果是这3个子线程一共卖出了5张票。这说明它们是共享了ThreadWay 接口的。
Java实现多线程的两种方式讲解相关推荐
- Java实现多线程的两种方式
认识多线程之前,我们先要了解几个关于多线程有关的概念. A:进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. B:线程 ...
- 多线程基础-实现多线程的两种方式(二)
实现多线程的两种方式: 1.实现Runnable public interface Runnable {public abstract void run(); }// RunnableTest.jav ...
- 创建和应用Java包文件的两种方式(转)
创建和应用Java包文件的两种方式(转) <Java编程艺术>章节选登.作者:高永强 清华大学出版社 (即将出版) 12.1 包--package ... 12.1.1 包命名规 ...
- java制作oracle程序,Java程序操作Oracle两种方式之简单实现
Java程序操作Oracle两种方式之简单实现 1.通过JDBC-ODBC桥连接Oracle数据库 (1)创建odbc源,在控制面板->管理工具->数据源(odbc)中添加DSN,比如取名 ...
- Java 实现抽奖的两种方式
Java实现抽奖的两种方式 方式一:随机数在哪个区间内返回区间下标 方式二:随机数加入区间点集合排序返回随机数下标 代码示例: ①抽奖入参类型为BigDecimal: package com.cfay ...
- Java格式化倒计时的两种方式
Java格式化倒计时的两种方式 第一种方式 /*** 入参是一个每秒减小1的秒数* 返回一个格式化的时间* * 该方法具有局限性,他在时间大于1个小时的时候,会返回错误的时间* 因为该方法调用了Dat ...
- java操作Excel有两种方式 方式1:jxl操作Excel jxl的API
java操作Excel有两种方式 方式1:jxl操作Excel 方式2:poi操作Excel 下面介绍jxl API: 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用 ...
- Java 实现多线程的四种方式 超详细
Java 实现多线程的四种方式 文章目录 Java 实现多线程的四种方式 一.继承 Thread 类 二.实现 Runnable 接口 三.实现 Callable 接口 四.线程池 1,Executo ...
- java 产生随机数的两种方式,Java产生随机数的两种方式
Java产生随机数的两种方式 Java产生随机数的两种方式 在java中,我们可以通过两种方式来获取随机数(generating a random number)一种是大家熟悉的java.lang.M ...
最新文章
- (原創) 如何讓Linux開機時,不要在圖形介面顯示開機訊息? (OS) (Linux) (CentOS)
- 文件输入输出和string流
- 【数据库】关系型数据库优化操作
- java判断实例_java判断类和实例的关系
- 69 session和cookie的区别
- 京东抢购机器人_戴森、科沃斯、SKG...超多大牌低价秒杀!京东电器等你来
- 服务器系统性能计数器,MSRS 2008 Windows Service 性能对象的性能计数器
- SPS:设置访问群体
- java基础——自动装箱与拆箱
- 写好数学建模竞赛论文的那些事
- 2022年电子邮箱哪个好用?邮箱大全测评来了,请及时查看哦
- 字节跳动实习 视频面试
- gmail 设置 smtp_如何在Linux上使用Gmail或SMTP设置电子邮件警报
- 怎么创建网站?创建网站流程分享
- 2021年隐私和安全性最佳的8款Linux手机
- oppo小布机器人_oppo小布小布没反应
- 电脑桌面的文件突然不见了怎么办
- JAVA如何利用迅雷接口解析磁力,关于神秘代码(磁力链接)如何正确使用
- mysql5.7无损复制_MySQL5.7新特性:lossless replication 无损复制
- 解决win10下安装typescript后仍报“tsc不是内部或外部命令...”的问题