博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Thread类和Runnable接口
阅读量:5127 次
发布时间:2019-06-13

本文共 1691 字,大约阅读时间需要 5 分钟。

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

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();// 创建线程对象1		MyThread2 mt2 = new MyThread2();// 创建线程对象2		MyThread2 mt3 = new MyThread2();// 创建线程对象3		mt1.start();// 启动线程1		mt2.start();// 启动线程2		mt3.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

你可能感兴趣的文章
ASM 图解
查看>>
Date Picker控件:
查看>>
你的第一个Django程序
查看>>
grafana授权公司内部邮箱登录 ldap配置
查看>>
treegrid.bootstrap使用说明
查看>>
[Docker]Docker拉取,上传镜像到Harbor仓库
查看>>
javascript 浏览器类型检测
查看>>
nginx 不带www到www域名的重定向
查看>>
记录:Android中StackOverflow的问题
查看>>
导航,头部,CSS基础
查看>>
[草稿]挂载新硬盘
查看>>
[USACO 2017 Feb Gold] Tutorial
查看>>
关于mysql中GROUP_CONCAT函数的使用
查看>>
OD使用教程20 - 调试篇20
查看>>
Java虚拟机(JVM)默认字符集详解
查看>>
Java Servlet 过滤器与 springmvc 拦截器的区别?
查看>>
(tmp >> 8) & 0xff;
查看>>
linux命令之ifconfig详细解释
查看>>
NAT地址转换
查看>>
Nhibernate 过长的字符串报错 dehydration property
查看>>