多线程编程(三)--创建线程之Thread VS Runnable
来源:互联网 发布:易企秀相似软件 编辑:程序博客网 时间:2024/05/09 20:51
前面写过一篇基础的创建多线程的博文:
那么本篇博文主要来对比一下这两种创建线程的区别。
继承Thread类:
还拿上篇博客的例子来说:
四个线程各自卖各自的票,说明四个线程之间没有共享,是独立的线程。每个线程平等,没有优先级关系。这三个线程不是一次交替执行,而是三个线程同时被执行的情况下,有的线程被分配时间片的机会多,票被提前卖完,有的线程被分配的时间片的机会少,票迟一些卖完。
故,利用扩展Thread类创建的多个线程,虽然执行的是相同的代码,但彼此相互独立,且各自拥有自己的资源,互不干扰。
分析Thread类的源码:
1)Thread类也是实现Runnable接口的,因此实现了Runnable接口中的run方法
2)当生成一个线程对象时,如果没有为其设定名字,那么线程对象的名字将使用如下形式:Thread-number,该number将是自动增加的,并被所有的Thread对象所共享(因为它是static的成员变量)
3)我们需要重写run方法,因为此时run方法什么事情也不做。
4)当使用Runnable方式生成线程对象时,我们需要实现Runnable接口的run方法,使用new Thread(new MyThread())来生成线程对象,这时的线程对象的run方法调用MyThread类的run方法,这样我们自己编写的run方法就执行了。
实现Runnable接口:
通过实现Runnable接口来实现线程间资源共享。
继承Thread类与实现Runnable接口的区别:
采用继承Thread类实现多线程:
优势:编写简单,如果需要访问当前线程,只需要使用this即可,无需使用Thread.currentThread()方法。
劣势:因为这种线程类已经继承了Thread类,所以不能再继承其他类。
实现Runnable接口:
优势:线程只是实现了接口,还可以继承其他类。
这种情况下,可以使多个线程共享一个target对象,所以非常适合多个线程用来处理同一份资源的情况,从而可以将cpu、代码和数据分开,形成清晰的模型,较好的体现面向对象思想。
劣势:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。
实现Runnable接口相对于扩展Thread类来说,具有无可比拟的优势。这种方式不仅有利于程序的健壮性,使代码能够被多个线程共享,而且代码和数据资源相对独立,从而特别适合多个具有相同代码的线程去处理同一资源的情况。这样一来,线程、代码和数据资源三者有效分离,很好地体现了面向对象程序设计思想。因此几乎所有的多线程程序都是通过实现Runnable接口的方式来完成的。
- 多线程编程(三)--创建线程之Thread VS Runnable
- 多线程编程(三)--创建线程之Thread VS Runnable
- 多线程编程(三)--创建线程之Thread VS Runnable
- 多线程之Thread VS Runnable
- Java多线程之 Thread VS Runnable
- JAVA多线程之Thread VS Runnable
- 细说多线程之Thread VS Runnable
- 3.多线程之Thread VS Runnable
- 细说多线程之Thread VS Runnable
- 多线程 Thread VS Runnable
- 多线程 Thread VS Runnable
- Java多线程编程之Runnable、Thread简介
- java 多线程(一)---创建线程的三种方式Thread,Runnable,Callable与Future
- 【java0006】多线程 - Thread VS Runnable
- 线程 Thread VS Runnable 基础
- 线程的创建(Runnable,Thread)
- Java多线程之 Thread VS Runnable 【带案例】
- Java 多线程之 Runnable VS Thread 及其资源共享问题
- IOS --Object-C 四种保存数据的方式
- 进程的层次结构
- 多线程编程(二)--进程&&线程
- CCS中寄存器定义方法
- LeetCode_62---Unique Paths
- 多线程编程(三)--创建线程之Thread VS Runnable
- 学习的地址网站
- IEnumerable和IEnumerator 详解
- 采购预算管理系统
- 浅谈凸优化问题中的Bregman迭代算法
- APP界面设计之尺寸篇
- 多线程编程(四)--线程同步
- java迷宫算法
- 黑马程序员——java基础之异常