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创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...
随机推荐
- 复习reactnative....
import React, { Component } from 'react'; import { AppRegistry, Text, Image, View, TextInput, Scroll ...
- .Net(C#)用正则表达式清除HTML标签(包括script和style),保留纯本文(UEdit中编写的内容上传到数据库)
去官网下载,本Demo用的MVC模式 下载地址:http://ueditor.baidu.com/website/download.html 加入文件夹中的结构: 引入了函数公式的图标: @{ Vie ...
- js调试console.log使用总结图解
一 实例 打印字符串和对象: 可展开对象查看内部情况: 看一下console对象本身的定义情况: 输出对象情况: utag对象所在文件: 输出对象: 二 Console.log 总结 1 如果你j ...
- 一脸懵逼学习Hive的元数据库Mysql方式安装配置
1:要想学习Hive必须将Hadoop启动起来,因为Hive本身没有自己的数据管理功能,全是依赖外部系统,包括分析也是依赖MapReduce: 2:七个节点跑HA集群模式的: 第一步:必须先将Zook ...
- 一脸懵逼学习Hdfs---动态增加节点和副本数量管理(Hdfs动态扩容)
1:按照上篇博客写的,将各个进程都启动起来: 集群规划: 主机名 IP 安装的软件 运行的进程 master ...
- 基于Redis的分布式锁到底安全吗
http://zhangtielei.com/posts/blog-redlock-reasoning.html
- thinkphp5控制器
// 定义应用目录 define('APP_PATH', __DIR__ . '/../app/'); // 定义配置文件目录和应用目录同级 define('CONF_PATH', __DIR__.' ...
- Sublime Text3搭建PHP开发环境
Sublime Text3搭建PHP开发环境 本文主要给大家分享了关于Sublime Text3搭建PHP开发环境 ,感兴趣的小伙伴可以做一下参考 一.Sublime text3安装 到官网http: ...
- M × N Puzzle POJ - 2893(奇数码)
The Eight Puzzle, among other sliding-tile puzzles, is one of the famous problems in artificial inte ...
- JavaScript中值类型与引用类型
JavaScript中的变量类型有哪些? 值类型:字符串(string).数值(number).布尔值(boolean).null.undefined 引用类型:对象(Object).数组(Array ...