Java多线程的几种创建方式
方法一:继承Thread类,重写run方法,直接调用start方法开启线程。
/**
* 继承Thread类,直接调用start方法开启线程。
* @author LuRenJia
*/
public class LeaningThread extends Thread {
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("可是这和我是一个冷酷的复读机又有什么关系呢?");
}
} public static void main(String[] args) {
LeaningThread Lt = new LeaningThread();
Lt.start();
}
}
方法二:实现Runable接口,重写run方法,通过Thread类调用start开启线程。
/**
* 实现Runnable接口来实现多线程,通过代理
* @author LuRenJia
*/
public class LeaningRunnable implements Runnable {
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("可是这和我是一个冷酷的复读机又有什么关系呢?");
}
}
public static void main(String[] args) {
new Thread(new LeaningRunnable()).start();
}
}
方法三:实现Callabler接口,重写call方法,通过ExecutorService类创建服务,调用其submit方法开启线程,通过其shutdown方法关闭服务。
/**
* 实现Callable接口来实现多线程
* @author LuRenJia
*/
public class LeaningCallable implements Callable<String> {
private String name; public LeaningCallable(String name) {
this.name = name;
} // 重写call方法,线程执行的内容,返回值通过get方法获取
@Override
public String call() throws Exception {
for (int i = 0; i < 20; i++) {
System.out.println(name + ":" + "可是这和我是一个冷酷的复读机又有什么关系呢?");
}
return name;
} public static void main(String[] args) {
LeaningCallable lc1 = new LeaningCallable("线程一");
LeaningCallable lc2 = new LeaningCallable("线程二");
LeaningCallable lc3 = new LeaningCallable("线程三"); // 创建执行服务
ExecutorService server = Executors.newFixedThreadPool(3); // 提交执行
Future<String> result1 = server.submit(lc1);
Future<String> result2 = server.submit(lc2);
Future<String> result3 = server.submit(lc3); try {
String temp = result1.get();// 获取返回值
System.out.println("返回值是:" + temp);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
// 关闭服务
server.shutdown();
}
}
快捷创建:使用lambda表达式快速创建简单线程。
/**
* lambda表达式:父类接口中只有一个方法待实现时,可以使用lambda表达式简化代码
* 1.标准形式:
* ()->{
*
* }
* 2.等价于一个实现了接口的之、子类。
*
* Thread类实现了Runnable接口,且此接口只有一个run方法待实现。
* @author LuRenJia
*
*/
public class LeaningLambda2 { public static void main(String[] args) {
new Thread(new Runnable(){
@Override
public void run() {
for(int i =0;i<100;i++) {
System.out.println("可是这和我是一个冷酷的复读机又有什么关系呢?");
} }
}).start(); //使用lambda表达式快速创建简单线程
new Thread(()->{
for(int i =0;i<100;i++) {
System.out.println("这触及到我的知识盲区了!");
}
}).start();
}
}
Java多线程的几种创建方式的更多相关文章
- java多线程的两种创建方式
方式一:继承Thread类 1.创建一个继承于Thread类的子类 2.重写Thread类的run()方法---> 将此线程执行的操作声明在run()中 3.创建Thread类的子类的对象 4. ...
- Java多线程的三种实现方式
java多线程的三种实现方式 一.继承Thread类 二.实现Runnable接口 三.使用ExecutorService, Callable, Future 无论是通过继承Thread类还是实现Ru ...
- java多线程的几种实现方式
java多线程的几种实现方式 1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target3.通 ...
- 阿里巴巴--java多线程的两种实现方式,以及二者的区别
阿里巴巴面试的时候,昨天问了我java面试的时候实现java多线程的两种方式,以及二者的区别当时只回答了实现线程的两种方式,但是没有回答上二者的区别: java实现多线程有两种方式: 1.继承Thre ...
- java中多线程的两种创建方式
一丶继承Thread类实现多线程 第一步:继承Thread类第二步:重写run()方法第三步:创建继承了Thread类的对象 , 调用start()方法启动. //线程创建方式一 : /* 第一步:继 ...
- Java多线程学习(二)---线程创建方式
线程创建方式 摘要: 1. 通过继承Thread类来创建并启动多线程的方式 2. 通过实现Runnable接口来创建并启动线程的方式 3. 通过实现Callable接口来创建并启动线程的方式 4. 总 ...
- Java多线程的两种实现方式
Java总共有两种方式实现多线程 方式1:通过继承Thread类的方式 package com.day04; /** * 通过继承Thread类并复写run方法来是实现多线程 * * @author ...
- java线程的3种创建方式及优缺点
线程创建简介 1.在java中表示线程的是Thread类.无论是那种方式创建线程,本质上都是创建Thread类的对象. 2.Thread类继承Runnable接口,且也有以Runnable作为参数的构 ...
- java 多线程编程三种实现方式
一种是继承Thread类,一种是实现Runable接口,还有一种是实现callable接口: 有博主说只有前面2种方式,我个人愚见是三种,主要详细介绍下callable的使用: 三种线程的我的个人理解 ...
随机推荐
- [CF1526F] Median Queries(交互 / 构造)
题面 这是一道交互题. 有一个未知的长度为 N \tt N N 的排列 P \tt P P,已知 P 1 < P 2 \tt P_1 < P_2 P1<P2 . 每次询问格式为 ...
- docker访问外部https数字证书问题
一般我们构建的 docker 镜像使用的都是 alpine linux 系统,默认是不带 ca-certificates 根证书的,导致无法识别外部 https 携带的数字证书. 在访问的时候,会抛出 ...
- Kingbase_FDW 使用介绍
与postgresql_fdw功能类似,KINGBASE_FDW 是一种外部访问接口,它可以被用来访问存储在外部的数据.想要使用fdw访问数据需要先确保:网络通,数据库访问配置(pg_hba,con ...
- mybatis 输出sql日志
logging.level.com.dsmp.server.core.pgsqldao=debug com.dsmp.server.core.pgsqldao 为包名
- shell脚本自动化部署Zabbix4.2(修改脚本替换版本)
#!/bin/bash # 检查操作系统版本,该脚本只能运行在 Centos 7.x 系统上 cat /etc/redhat-release |grep -i centos |grep '7.[[:d ...
- 华南理工大学 Python第3章课后小测-2
1.(单选)给出如下代码 s = 'Hello scut' print(s[4::-1]) 上述代码的输出结果是(本题分数:2)A) HelloB) olleHC) scutD) tucs您的答案:B ...
- Vmware部署Linux无人值守安装Centos7系统
Linux - 无人值守安装服务 # 需求分析 - 使用光盘镜像来安装 Linux 系统的方式; 坦白讲, 该方法适用于只安装少量 Linux 系统的情况, 如果生产环境中有数百台服务器都需安装系统, ...
- 关于使用kubeoperator搭建k8s集群使用containerd作为容器运行时,从自己搭建的habor仓库拉取镜像的有关说明
1.kubepi界面添加habor仓库信息,并授权给k8s集群 这一步的操作是当在工作负载选择从harbor仓库拉取镜像时会自动创建有关的secrets信息,从而不用事先手动创建了(有别于kuboar ...
- Portainer安装,配置自定义镜像仓库拉取镜像
Portainer介绍 Portainer是Docker的图形化管理工具,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控制台 ...
- PostgreSQL 创建表格
PostgreSQL 使用 CREATE TABLE 语句来创建数据库表格. 语法 CREATE TABLE 语法格式如下: CREATE TABLE table_name( column1 data ...