两者都可以实现多线程,那么两者的区别和联系有哪些?

Thread类的定义。

public  class  Thread  extends Object implements  Runnable

从Thread类的定义可以清楚的发现,Thread类也是Runnable接口的子类,但是Thread类中并没有完全地实现Runnable接口中的run()方法,

区别:如果一个类继承Thread类,则不适合于多个线程共享资源,而实现了Runnable接口,就可以方便地实现资源的共享。

范例:继承Thread不能共享资源

package ThreadDemo01;class MyThread2 extends Thread {private int ticket = 5;public void run() { // 覆写Thread类的run()方法for (int i = 0; i < 100; i++) {if (ticket > 0) {System.out.println("买票:tick=" + ticket--);}}}
}public class ThreadDemo04 {public static void main(String[] args) {MyThread2 mt1 = new MyThread2();// 创建线程对象1MyThread2 mt2 = new MyThread2();// 创建线程对象2MyThread2 mt3 = new MyThread2();// 创建线程对象3mt1.start();// 启动线程1mt2.start();// 启动线程2mt3.start();// 启动线程3}
}

 结果:

买票:tick=5
买票:tick=4
买票:tick=3
买票:tick=2
买票:tick=1
买票:tick=5
买票:tick=4
买票:tick=3
买票:tick=2
买票:tick=1
买票:tick=5
买票:tick=4
买票:tick=3
买票:tick=2
买票:tick=1

范例:Runnable可以实现资源共享

package test1;class MyThread implements Runnable {private int ticket = 5;public void run() {for (int i = 0; i < 100; i++) {if (ticket > 0) {System.out.println("买票:ticket=" + ticket--);}}}
}public class ThreadDemo02 {public static void main(String[] args) {MyThread mt1 = new MyThread(); // 创建线程对象new Thread(mt1).start();new Thread(mt1).start();new Thread(mt1).start();new Thread(mt1).start();new Thread(mt1).start();new Thread(mt1).start();new Thread(mt1).start(); // 启动了7个线程}
}

  结果:

买票:ticket=5
买票:ticket=4
买票:ticket=3
买票:ticket=2
买票:ticket=1

虽然启动了7个线程,但是指卖出了五张票

使用Runnable的好处是:

1.适合多个相同程序代码的线程去处理同一资源的情况

2.可以避免由与java的单继承特性带来的局限性

3.增强了程序的健壮性,代码能够被多线程共享代码与数据独立



转载于:https://www.cnblogs.com/bokun-wang/archive/2011/12/08/2281203.html

Thread类和Runnable接口相关推荐

  1. Java多线程的实现方式-Thread 类,Runnable 接口

    在 Java 的 JDK 开发包中,已经自带了对多线程技术的支持,可以方便地进行多线程编程.实现多线程编程的方式主要有两种:一种是继承 Thread 类,另一种是实现 Runnable 接口.下面详细 ...

  2. Java多线程和并发(三),Thread类和Runnable接口

    目录 1.Thread和Runnable接口 三.Thread类和Runnable接口 1.Thread和Runnable接口 转载于:https://www.cnblogs.com/xzmxddx/ ...

  3. Thread类和Runnable接口如何运用?

    Java的多线程系统建立于Thread类,它的方法,它的共伴接口Runnable基础上. Thread类封装了线程的执行.既然你不能直接引用运行着的线程的状态,你要通过它的代理处理它,于是Thread ...

  4. java多线程(一)-Thread类和Runnable接口

    public class Thread extends Object implements Runnable Thread通过实现Runnable实现多态关系. Java中实现多线程,最基本2种方式: ...

  5. Thread类和Runnable接口的优劣

    通过继承Thread类的方式,可以完成多线程的建立. 但是这种方式有一个局限性,如果一个类已经有了自己的父类,就不可以继承Thread类,因为java是单继承. 可是该类中的还有部分代码需要被多个线程 ...

  6. Thread类、Runnable接口详解

    前言 Thread类想必都不陌生,第一次学习多线程的时候就一定会接触Thread类.本篇主要从Thread类的定义.使用.注意事项.源码等方面入手,全方位的讲解Thread类. Thread 我们经常 ...

  7. Thread类和Runable接口使用

    不废话,就一个类,直接拷贝代码执行 1 package com.jtfr.demo; 2 3 /** 4 * 主要:继承 Thread 类和 Runnable接口 5 * @author 陈康明 qq ...

  8. 利用Applet类和Runnable接口实现滚动字幕

    利用Applet类和Runnable接口实现滚动字幕,其中字幕文字("学好java")和时间间隔("200")需要由页面文件中标记的子标记传递. package ...

  9. JavaSE学习52:细说多线程之Thread类和Runable接口

    一线程创建的两种方式比较 线程创建和启动有两种方式,这里只是列出步骤,不再进行详细解释. (1)继承Thread类 [java] view plaincopy print? class MyThrea ...

最新文章

  1. Machine Learning | (8) Scikit-learn的分类器算法-随机森林(Random Forest)
  2. python笔记6--编码
  3. 区块链BaaS云服务(19)趣链“联邦计算BitXmesh”
  4. Python open()函数用法详解
  5. Spring Data Jpa 实体类自动创建数据库表失败解决
  6. ext.ajax.request跨域,跨域Ajax访问header中 x-requested-with丢失
  7. 当今将Windows应用程序迁移到Windows on Arm的实践
  8. 微课|玩转Python轻松过二级(3.1节):列表推导式与切片
  9. CentOS 7部署 Ceph分布式存储架构
  10. Office groove系统的术语
  11. php 连等赋值,变量赋值时的,多个变量连等的问题
  12. 【车间调度】基于matlab粒子群算法求解生产调度问题【含Matlab源码 485期】
  13. 管家婆的验证服务器失败,管家婆登陆提示“连接服务器失败”怎么办
  14. mysql 节假日判断,sql 节假日判断(春节、中秋、国庆、周末等)
  15. 网络安全之暴力破解win7密码
  16. 同一台电脑安装两个版本的jdk和jre
  17. com组件 的劫持_IE首页被劫持跳转问题的解决方案
  18. PhotoShopCS6安装及其破解【带资源免费】
  19. 使用Keras进行图像分类
  20. 关于数据仓库、数据湖、数据平台和数据中台的概念和区别

热门文章

  1. STM32 RS485 和串口 只能接收不能发送问题解决
  2. 记一次MySQL手工注入
  3. 【OpenCV】imread读取数据为空
  4. Maven--反应堆(Reactor)
  5. 字体小于12px解决办法
  6. asp.net 网站开发流程总结
  7. C#秘密武器之反射——基础篇
  8. PowerDesigner从数据库导入
  9. Android Log工具类,Toast工具类,获取当前方法名称
  10. web项目Servlet配置及jsp访问Servlet