Java 多线程 创建线程的4种方式
1 继承Thread类,重写run方法。Thread类实现了Runnable接口。
2 实现Runnable接口,重写run方法。相比于继承Thread类,可以避免单继承的缺陷和实现资源共享。
举例:假设两个窗口在卖5张火车票。
继承Thread类方式:
public class SharedDataThreadDemo {
public static void main(String[] args) {
TicketThread t1 = new TicketThread("1号窗口");
t1.start();
TicketThread t2 = new TicketThread("2号窗口");
t2.start();
}
}
class TicketThread extends Thread {
private int ticket = 5;
public TicketThread(String name) {
super(name);
}
@Override
public void run() {
while(true) {
System.out.println(this.getName() + ":" + (ticket--));
if(ticket < 1) {
break;
}
}
}
}
结果如下:
1号窗口:5
2号窗口:5
1号窗口:4
2号窗口:4
1号窗口:3
2号窗口:3
1号窗口:2
2号窗口:2
1号窗口:1
2号窗口:1
每个线程相互独立,不共享资源,每个线程各自卖了5张票,总共卖出10张票。如果真卖票,就有问题了。
实现Runnable接口方式:
public class SharedDataThreadDemo {
public static void main(String[] args) {
TicketRunnable ticketRunnable = new TicketRunnable();
Thread t1 = new Thread(ticketRunnable, "1号窗口");
t1.start();
Thread t2 = new Thread(ticketRunnable, "2号窗口");
t2.start();
}
}
class TicketRunnable implements Runnable {
private int ticket = 5;
@Override
public void run() {
while(true) {
System.out.println(Thread.currentThread().getName() + ":" + (ticket--));
if(ticket < 1) {
break;
}
}
}
}
结果如下:
2号窗口:4
1号窗口:5
2号窗口:3
1号窗口:2
2号窗口:1
每个线程共享了实现Runnable接口的类实例资源即对象ticketRunnable的火车票资源,共卖出10张票。
3 实现Callable接口,重写call方法,有返回值。
4 使用实现了Executor接口的ThreadPoolExecutor来创建线程池。
参考资料
Java 多线程 创建线程的4种方式的更多相关文章
- Java多线程——创建线程的两种方式
创建线程方式一:继承Thread类. 步骤:1,定义一个类继承Thread类.2,覆盖Thread类中的run方法.3,直接创建Thread的子类对象创建线程.4,调用start方法开启线程并调用线程 ...
- Java多线程-----创建线程的几种方式
1.继承Thread类创建线程 定义Thread类的子类,并重写该类的run()方法,该方法的方法体就是线程需要完成的任务,run()方法也称为线程执行体 创建Thread子类的实例,也就是创建 ...
- 0036 Java学习笔记-多线程-创建线程的三种方式
创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...
- Java中创建线程的两种方式
创建线程的第一种方式: 创建一个类继承Thread 重写Thread中的run方法 (创建线程是为了执行任务 任务代码必须有存储位置,run方法就是任务代码的存储位置.) 创建子类对象,其实就是在创建 ...
- Java值创建线程的两种方式对比
在Java中创建线程的方式有两种,第一种是直接继承Thead类,另一种是实现Runable接口.那么这两种方式孰优孰劣呢? 采用继承Thead类实现多线程: 优势:编写简单,如果需要访问当前线程,只需 ...
- Java中创建线程的三种方式以及区别
在java中如果要创建线程的话,一般有3种方法: 继承Thread类: 实现Runnable接口: 使用Callable和Future创建线程. 1. 继承Thread类 继承Thread类的话,必须 ...
- Java中创建线程的三种方式及其优缺点
1.自定义一个继承Thread的类,由于Java的单继承特性,限制了该类的扩展性. 2.实现Runnable接口,重写run()方法. 3.实现Callable接口,重写call方法.线程执行体可以有 ...
- 【Java】创建线程对象两种方式
1.继承Thread类,重载run方法: Thread t = new Thread(new Runnable() { @Override public void run() { // TODO Au ...
- Java并发编程:Java创建线程的三种方式
目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...
随机推荐
- 让Mysql支持Emoji表情,解决[Err] 1366 - Incorrect string value: '\xF0\xA3\x84\x83'
mysql insert内容包含表情或者unicode码时候,插入Mysql时失败了,报如下异常: java.sql.SQLException: Incorrect string value: '\x ...
- nodejs 环境安装
参考网站 http://www.runoob.com/nodejs/nodejs-http-server.html https://github.com/nodesource/distribution ...
- GZipStream 压缩与解压数据
简介:此类表示 GZip 数据格式,它使用无损压缩和解压缩文件的行业标准算法.这种格式包括一个检测数据损坏的循环冗余校验值.GZip 数据格式使用的算法与 DeflateStream 类的算法相同,但 ...
- 实现虚拟机VMware上Centos操作系统与主机windows之间互相复制与粘贴
1.启动你的虚拟机,然后点击虚拟机,如下所示(未安装的话,显示的是安装VMware Tools): 2.点击安装Vmware tools以后显示如下所示: 3.VMwareTools-9.9.2-24 ...
- JDK8 新特性流式数据处理
https://blog.csdn.net/canot/article/details/52957262
- 前端面试题集锦及答案解析--HTML、 HTTP、web综合问题
前端需要注意哪些SEO 合理的title.description.keywords:搜索对着三项的权重逐个减小,title值强调重点即可,重要关键词出现不要超过2次,而且要靠前,不同页面title要有 ...
- .net core 中的 DependencyInjection - IOC
概要:因为不知道写啥,所以随便找个东西乱说几句,嗯,就这样,就是这个目的. 1.IOC是啥呢? IOC - Inversion of Control,即控制反转的意思,这里要搞明白的就是,它是一种思想 ...
- MySQL事务提交过程(二)
上一篇文章我们介绍了在关闭binlog的情况下,事务提交的大概流程.之所以关闭binlog,是因为开启binlog后事务提交流程会变成两阶段提交,这里的两阶段提交并不涉及分布式事务,当然mysql把它 ...
- AtCoder Regular Contest 101 (ARC101) D - Median of Medians 二分答案 树状数组
原文链接https://www.cnblogs.com/zhouzhendong/p/ARC101D.html 题目传送门 - ARC101D 题意 给定一个序列 A . 定义一个序列 A 的中位数为 ...
- JavaSE | IO流
java.io.File类(文件和目录路径名的抽象表示形式) 如果希望在程序中操作文件和目录都可以通过File类来完成,File类能新建.删除.重命名文件和目录. File类是文件或目录的路径,而不是 ...