Java两种实现多线程方式的比较( implements Runnable 与 extends Thread )
来源:互联网 发布:詹姆斯季后赛数据排名 编辑:程序博客网 时间:2024/05/16 11:40
1、implements Runnable 创建线程
实现步骤:
(1) 定义一个线程类实现Runnable接口,重写接口中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。
(2) 创建一个Thread类的对象,实现Runnable接口。
(3) 调用Thread对象的start()方法,启动线程,隐含地调用了run()方法。
例程代码:
package Test.Thread;public class ThreadImplRunnable implements Runnable {int count = 10;@Overridepublic void run() {System.out.println("# "+Thread.currentThread().getName()+" got count is " + count);while(count > 0) { System.out.println("# "+Thread.currentThread().getName()+" : "+ count--); } System.out.println("# "+Thread.currentThread().getName()+" : run over."); } public static void main(String[] args) {ThreadImplRunnable tir = new ThreadImplRunnable(); Thread thread1 = new Thread(tir); Thread thread2 = new Thread(tir); thread1.start(); thread2.start();}}
运行结果:
简单分析:
从上图可以看出,在这个例程中,两个线程其实是共享了一个count变量资源,都可以对count进行减法操作。当count减为0时,两个线程都退出了。故一共做了10次减法。
2、extends Thread 创建线程
实现步骤:
(1) 首先定义一个类去继承Thread类,重写父类中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。
(2) 然后在初始化线程时,new一个子类的对象。
(3) 调用start方法,启动线程,隐含地调用了run()方法。
例程代码:
package Test.Thread;public class ThreadExtendsThread extends Thread{int count =10;@Overridepublic void run(){System.out.println("# "+Thread.currentThread().getName()+" got count is " + count);while(count > 0) {System.out.println("# "+Thread.currentThread().getName()+" : "+ count--); }System.out.println("# "+Thread.currentThread().getName()+" : run over.");}public static void main(String[] args) { ThreadExtendsThread thread1 = new ThreadExtendsThread(); ThreadExtendsThread thread2 = new ThreadExtendsThread(); thread1.start(); thread2.start();}}
运行结果:
简单分析:
从上图就可以看出二者的差异了。采用继承Thread类方法实现的两个线程并没有共享count变量,而是各自取到了count变量的副本,并各自做了10次减法,当属于自己的count变为0时,退出线程。
3、两种实现方式的比较
根据以上分析我们可以知道,使用实现Runnable接口方式创建的线程会共享同一个目标对象,实现了多个相同线程处理同一份资源;而使用继承Thread类方式创建的线程则是各自持有一个资源对象的副本,只对自己的副本资源进行处理。
由此,我们可以总结出如下的差异:
采用继承Thread类方式:
(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。
采用实现Runnable接口方式:
(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。阅读全文
0 0
- Java两种实现多线程方式的比较( implements Runnable 与 extends Thread )
- extends Thread 与 implements Runnable 的区别 创建多线程的比较
- 线程的两种玩法:extends Thread和implements Runnable
- Java中extends Thread 与 implements Runnable 的区别
- java、android线程extends Thread 与 implements Runnable 的区别
- extends Thread 与 implements Runnable 的区别
- extends Thread 与 implements Runnable 的区别
- extends Thread 与 implements Runnable 的区别
- extends Thread 与 implements Runnable 的区别
- extends Thread 与 implements Runnable 的区别
- extends Thread 与 implements Runnable 的区别
- extends Thread 与 implements Runnable 的区别
- extends Thread 与 implements Runnable 的区别
- extends Thread 与 implements Runnable 的区别
- implements Runnable与extends Thread 的区别
- 实现多线程的两种方式Runnable与Thread
- "implements Runnable"与"extends Thread"
- Java 多线程:extends Thread Class & implements Runnable Interface
- 二叉搜索树的后续遍历
- Python空间数据处理3: HDF格式转GDAL支持格式
- Python3.x执行POST请求是出现POST data should be bytes or an iterable of bytes. It cannot be of type str.错误
- Android系列之自定义Button控件
- Hibernate绑定session
- Java两种实现多线程方式的比较( implements Runnable 与 extends Thread )
- 后缀平衡树
- Construct String from Binary Tree(tag:String)
- 2.前端常见面试编程题整理
- Hibernate的api使用
- 后缀自动机
- springMVC---框架原理
- 华为OJ——统计不同的字符的种类
- 跟我一起学C语言(第二天)