并发编程>>四种实现方式(三)
概述
1、继承Thread
2、实现Runable接口
3、实现Callable接口通过FutureTask包装器来创建Thread线程
4、通过Executor框架实现多线程的结构化,即线程池实现。(该实现方式将会下一篇单独介绍)
1、继承Thread
class CreateThreadByExtendThread extends Thread {
public CreateThreadByExtendThread(String name) {
super(name);
}
@Override
public void run() {
for(int i=0;i<=2;i++) {
System.out.println(Thread.currentThread().getName()+"线程,线程号{"+Thread.currentThread().getId()+"},i="+i);
}
}
}
2、实现Runable接口
class CreateThreadByImpleRunable implements Runnable{
@Override
public void run() {
for(int i=0;i<=2;i++) {
System.out.println(Thread.currentThread().getName()+"线程,线程号{"+Thread.currentThread().getId()+"},i="+i);
}
}
}
执行CreateThreadByExtendThread和CreateThreadByImpleRunable
public class CreateThread {
public CreateThread() {
// TODO Auto-generated constructor stub
}
/**
* <p>
* 测试并发编程实现方式
* </p>
* @param args
*/
public static void main(String[] args) {
CreateThreadByExtendThread ctetThread = new CreateThreadByExtendThread("AAAA");
ctetThread.start();
Thread ctbrThread = new Thread(new CreateThreadByImpleRunable(),"BBBB");
ctbrThread.start();
}
}
执行结果

上述是无返回结果的线程,二者区别:Thread类实现了Runable接口。从代码灵活性的角度考虑建议使用第二种方式。
3、实现Callable接口通过FutureTask包装器来创建Thread线程
class CreateThreadByImpleCallable<String> implements Callable<String>{
private CreateThreadByImpleCallable<String> ctbc = null;
@Override
public String call() throws Exception {
for(int i=0;i<=2;i++) {
System.out.println(Thread.currentThread().getName()+"线程,线程号{"+Thread.currentThread().getId()+"},i="+i);
}
return (String) "Game over";
}
public String getTask() throws InterruptedException, ExecutionException {
ctbc = ctbc == null ? new CreateThreadByImpleCallable<String>() : ctbc;
FutureTask<String> ftTask = new FutureTask<String>(ctbc);
Thread ftThread = new Thread(ftTask,"CCCC");
ftThread.start();
return ftTask.get();
}
}
上述main方法添加此行代码
try {
System.out.print(new CreateThreadByImpleCallable<String>().getTask());
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
执行结果

并发编程>>四种实现方式(三)的更多相关文章
- 【连载】redis库存操作,分布式锁的四种实现方式[三]--基于Redis watch机制实现分布式锁
一.redis的事务介绍 1. Redis保证一个事务中的所有命令要么都执行,要么都不执行.如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列,事务中的所有命令都不会执行.而一旦客户端发 ...
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences
除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...
- js介绍,js三种引入方式,js选择器,js四种调试方式,js操作页面文档DOM(修改文本,修改css样式,修改属性)
js介绍 js运行编写在浏览器上的脚本语言(外挂,具有逻辑性) 脚本语言:运行在浏览器上的独立的代码块(具有逻辑性) 操作BOM 浏览器对象盒子 操作DOM 文本对象 js三种引入方式 (1)行间式: ...
- (转)Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences
除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...
- Android开发之基本控件和详解四种布局方式
Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider
ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 在SQLite中, ...
- xml常用四种解析方式优缺点的分析×××××
xml常用四种解析方式优缺点的分析 博客分类: xml 最近用得到xml的解析方式,于是就翻了翻自己的笔记同时从网上查找了资料,自己在前人的基础上总结了下,贴出来大家分享下. 首先介绍一下xml语 ...
- SpringMVC的REST风格的四种请求方式
一. 在HTTP 协议里面,四个表示操作方式的动词:GET.POST.PUT.DELETE. ·它们分别对应四种基本操作: 1.GET ====== 获 取资源 2.POST ======新建资源 ...
随机推荐
- CiteSpace安装使用简介
一.简介 CiteSpaceⅡ基于JAVA平台的信息可视化软,是美国Drexel大学陈超美(Chaomei Chen)教授开发的,用于文献引文网络分析的信息,作为文献计量学方面最先进的分析工具之一,是 ...
- 4款APP原型设计工具助你搞定移动应用设计!
随着信息化社会的不断发展,不仅手机迭代更新的速度飞快,就连手机里的App 也层出不穷.作为一名UI/UX设计师或产品经理,如何才能设计一款出色的移动App?光有好的创意是不够的,你还需要一款正确的Ap ...
- Android系统编译与测试
1.Android系统分析 2.下载Android源代码(不包括Linux内核部分) 下载好了的Android_5.01.tar.gz,通过samba复制到ubuntu里,再解压之. 可以看到Andr ...
- Linux的磁盘分区(三)
RAID 廉价冗余磁盘阵列 Redundant Arrays of Inexpensive Disks 不同级别的RAID功能.特性各不相同 对比项 RAID0 RAID1 RAID10 RAID5 ...
- Linux 基础教程 31-tcpdump命令-3
经过前面的学习,tcpdump的用法相信应该都掌握了,今天我们来学习对tcpdump输出内容的学习和了解.我们以第一个示例进行讲解如下所示: IP协议包分析 [root@localhost ~ ...
- jsp中路径的写法
在JavaWeb开发中,常使用绝对路径的方式来引入JavaScript和CSS文件,这样可以避免因为目录变动导致引入文件找不到的情况 代码” ${pageContext.request.context ...
- Oracle EBS Request Status: Pending
如果提交请求以后,状态一直是pending状态,可以在"工具"打开"Manager",查看一下Maximum是否有设置错,另外pending的数量当前是多少. ...
- CentOS6.4 X86_64 kvm+PXE备忘
Install 安装 1 2 3 4 5 # yum install qemu-kvm qemu-img # 使用kvm至少要安装的包,一个提供用户级别kvm模拟器,一个提供磁盘镜像的管理 # 安装虚 ...
- 为Visual Studio添加一个“编码的UI测试生成器”的快捷方式
在添加CodedUI测试用例时,经常需要查看捕获控件的属性.按照常规的方式,只有在添加一个全新的CodedUI编码测试时才能查看捕获控件的属性,这样很不方便. 下面介绍在Visual Studio工具 ...
- Solr相似度算法三:DRFSimilarity
该Similarity 实现了 divergence from randomness (偏离随机性)框架,这是一种基于同名概率模型的相似度模型. 该 similarity有以下配置选项: basic ...