[转载]Java线程的两种实现方式
转载:http://baijiahao.baidu.com/s?id=1602265641578157555&wfr=spider&for=pc
前言
线程是程序的一条执行线索,执行路径,是程序使用cpu的最小单位。线程本身不能运行,它只能运行在程序中,线程是依赖于程序存在的。
多线程的意义
其实任何一个程序的执行都需要获得cpu的执行权,是由cpu来去决定到底是由哪个程序来去执行,那么多线程的存在其实就是“最大限度的利用cpu资源”,当某一个线程的处理不需要占用cpu而之和I/O打交道的时候,让需要占用cpu资源的其他线程有机会获得cpu资源。从根本上说,这就是说多线程编程的目的。
多线程的目的
不同于其他大多数编程语言,Java本身内置了多线程的支持。使用多线程,可以帮助我们编写出cpu最大利用率的高效程序,使得空闲时间降到最低,这个对于Java运行的交互式的网络互联环境是至关重要的,因为空闲时间是公共的。例如,网络的传输效率远远低于计算机的处理速度,而本地文件系统资源的读写速度也远远低于cpu的处理能力。多线程使得并且能够充分利用这些空闲时间。
Thread类说明
我们知道Java是面向对象的语言,一切皆对象,那么线程本身也是一个东西,一个事务,那么也应该由一个类来去表示,这个类就是Thread。下面是JDK的说明。
线程的实现方式
从JDK的文档上看,在Java中实现线程有两种方式,一种是继承Thread类,另一种是实现Runnable接口。
1、继承Thread类
总结:我们应该要把线程执行的代码放到run方法中,启动线程使用start方法。如果使用run方法,则这个不叫线程的运行,而是叫普通方法的调用。
2、实现Runnable接口
总结
使用继承Thread类和实现Runnable接口的关系和区别:
- Thread类本身也是实现了Runnable接口,因此也是实现了Runnable接口中的run方法。
- 当使用继承Thread类去实现线程时,我们需要重写run方法,因为Thread类中的run方法本身什么事情都不干。
- 当使用实现Runnable接口去实现线程时,我们需要重写run方法,然后使用new Thread(Runnable)这种方式来生成线程对象,这个时候线程对象中的run方法才会去执行我们自己实现的Runnable接口中的run方法。
[转载]Java线程的两种实现方式的更多相关文章
- Java多线程的两种实现方式
Java总共有两种方式实现多线程 方式1:通过继承Thread类的方式 package com.day04; /** * 通过继承Thread类并复写run方法来是实现多线程 * * @author ...
- 阿里巴巴--java多线程的两种实现方式,以及二者的区别
阿里巴巴面试的时候,昨天问了我java面试的时候实现java多线程的两种方式,以及二者的区别当时只回答了实现线程的两种方式,但是没有回答上二者的区别: java实现多线程有两种方式: 1.继承Thre ...
- java多线程总结一:线程的两种创建方式及比较
1.线程的概念:线程(thread)是指一个任务从头至尾的执行流,线程提供一个运行任务的机制,对于java而言,一个程序中可以并发的执行多个线程,这些线程可以在多处理器系统上同时运行.当程序作为一个应 ...
- java多线程总结一:线程的两种创建方式及优劣比较
1.通过实现Runnable接口线程创建 (1).定义一个类实现Runnable接口,重写接口中的run()方法.在run()方法中加入具体的任务代码或处理逻辑. (2).创建Runnable接口实现 ...
- java多线程总结:线程的两种创建方式及优劣比较
1.通过实现Runnable接口线程创建 (1).定义一个类实现Runnable接口,重写接口中的run()方法.在run()方法中加入具体的任务代码或处理逻辑. (2).创建Runnable接口实现 ...
- linux下线程的两种封装方式
在网络编程的时候往往需要对Linux下原生的pthread库中的函数进行封装,使其使用起来更加方便,封装方法一般有两种:面向对象和基于对象,下面将分别介绍这两种方式,最后统一分析这两种方式的优缺点: ...
- Java线程的两种实现形式
一.创建线程的第一种方式:继承Thread类 class Demo extends Thread{ @Override public void run() { super.run(); for(int ...
- Thread -线程的两种创建方式
package cn.learn.thread.Thread; /* 实现Runnable必须重写run()方法,一般推荐用Runnable实现 */ public class RunnableImp ...
- java线程的3种实现方式及线程池
1 准备数据 1.1 目标 为了形象地演示线程的工作现象, 准备两个文件datas/odds.txt和datas/evens.txt, 分别存储奇数和偶数, 内容如下: odds.txt 1 3 5 ...
随机推荐
- 编码转换(UTF8->GBK)
WCHAR woutstr[]; ]; , value, -, NULL, ); MultiByteToWideChar(CP_UTF8, , value, -, woutstr, len); len ...
- file_get_content服务器对服务器二进制文件上传
1.file_get_contents函数可安全用于二进制对象,适用服务器对服务器文件是上传场景 base64_encode(file_get_contents('1268879774AaCl4wIE ...
- svn关键词BASE, HEAD, COMMITTED, PREV的深入理解
svn关键词BASE, HEAD, COMMITTED, PREV可以很方便用于日常操作中,但是很多人对他们的工作原理和方式不是太了解. 在这里我将使用用例,诠释他们的作用和意图. 先给出svn手册中 ...
- [转] C#实现在Sql Server中存储和读取Word文件 (Not Correct Modified)
出处 C#实现在Sql Server中存储和读取Word文件 要实现在Sql Server中实现将文件读写Word文件,需要在要存取的表中添加Image类型的列,示例表结构为: CREATE TABL ...
- C#条形码生成(五)----Web下的测试
Html部分 <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server" ...
- win10 IIS 10.0 无法安装 URL Rewrite Module 重写模块
打开注册表 win+R 输入 regidit在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp位置 修改注册表 把MajorVersion的值改为9 安装 ...
- C语言增量内存申请 realloc
void* realloc (void* ptr, size_t size); Reallocate memory block Changes the size of the memory block ...
- Mysql 日志文件类型
简介: Mysql 中提供了多种类型的日志文件,分别反映 Mysql 的不同信息,了解它们很有必要. 1.Error log ( 错误日志 ) 错误日志记录了 Mysql Server 运行过程中所有 ...
- pom----Maven内置属性及使用
Maven共有6类属性: 内置属性(Maven预定义,用户可以直接使用) ${basedir}表示项目根目录,即包含pom.xml文件的目录; ${version}表示项目版本; ${project. ...
- NHibernate注意事项
1.检查映射文件是否正确 2.检查配置文件的“嵌入的资源”选项 3.检查Configuration是否加载了程序集