Thread类和Runnable接口
两者都可以实现多线程,那么两者的区别和联系有哪些?
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接口相关推荐
- Java多线程的实现方式-Thread 类,Runnable 接口
在 Java 的 JDK 开发包中,已经自带了对多线程技术的支持,可以方便地进行多线程编程.实现多线程编程的方式主要有两种:一种是继承 Thread 类,另一种是实现 Runnable 接口.下面详细 ...
- Java多线程和并发(三),Thread类和Runnable接口
目录 1.Thread和Runnable接口 三.Thread类和Runnable接口 1.Thread和Runnable接口 转载于:https://www.cnblogs.com/xzmxddx/ ...
- Thread类和Runnable接口如何运用?
Java的多线程系统建立于Thread类,它的方法,它的共伴接口Runnable基础上. Thread类封装了线程的执行.既然你不能直接引用运行着的线程的状态,你要通过它的代理处理它,于是Thread ...
- java多线程(一)-Thread类和Runnable接口
public class Thread extends Object implements Runnable Thread通过实现Runnable实现多态关系. Java中实现多线程,最基本2种方式: ...
- Thread类和Runnable接口的优劣
通过继承Thread类的方式,可以完成多线程的建立. 但是这种方式有一个局限性,如果一个类已经有了自己的父类,就不可以继承Thread类,因为java是单继承. 可是该类中的还有部分代码需要被多个线程 ...
- Thread类、Runnable接口详解
前言 Thread类想必都不陌生,第一次学习多线程的时候就一定会接触Thread类.本篇主要从Thread类的定义.使用.注意事项.源码等方面入手,全方位的讲解Thread类. Thread 我们经常 ...
- Thread类和Runable接口使用
不废话,就一个类,直接拷贝代码执行 1 package com.jtfr.demo; 2 3 /** 4 * 主要:继承 Thread 类和 Runnable接口 5 * @author 陈康明 qq ...
- 利用Applet类和Runnable接口实现滚动字幕
利用Applet类和Runnable接口实现滚动字幕,其中字幕文字("学好java")和时间间隔("200")需要由页面文件中标记的子标记传递. package ...
- JavaSE学习52:细说多线程之Thread类和Runable接口
一线程创建的两种方式比较 线程创建和启动有两种方式,这里只是列出步骤,不再进行详细解释. (1)继承Thread类 [java] view plaincopy print? class MyThrea ...
最新文章
- Machine Learning | (8) Scikit-learn的分类器算法-随机森林(Random Forest)
- python笔记6--编码
- 区块链BaaS云服务(19)趣链“联邦计算BitXmesh”
- Python open()函数用法详解
- Spring Data Jpa 实体类自动创建数据库表失败解决
- ext.ajax.request跨域,跨域Ajax访问header中 x-requested-with丢失
- 当今将Windows应用程序迁移到Windows on Arm的实践
- 微课|玩转Python轻松过二级(3.1节):列表推导式与切片
- CentOS 7部署 Ceph分布式存储架构
- Office groove系统的术语
- php 连等赋值,变量赋值时的,多个变量连等的问题
- 【车间调度】基于matlab粒子群算法求解生产调度问题【含Matlab源码 485期】
- 管家婆的验证服务器失败,管家婆登陆提示“连接服务器失败”怎么办
- mysql 节假日判断,sql 节假日判断(春节、中秋、国庆、周末等)
- 网络安全之暴力破解win7密码
- 同一台电脑安装两个版本的jdk和jre
- com组件 的劫持_IE首页被劫持跳转问题的解决方案
- PhotoShopCS6安装及其破解【带资源免费】
- 使用Keras进行图像分类
- 关于数据仓库、数据湖、数据平台和数据中台的概念和区别