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 . 每次询问格式为 ...
- 【java】学习路线12-内部类的使用事项
//内部类只能在其外部类当中使用//局部内部类:定义在方法里面//如果内部类和外部类有重名,就近原则在内部类中优先访问内部类.//如果想访问宿主类的同名成员,使用OuterClass.this.xxx ...
- 应用性能监控:SkyWalking
目录 SkyWalking 简介 SkyWalking 搭建 平台后端(Backend) 平台前端(UI) Java Agent(Java 应用监控) Java Agent 下载 Java 演练项目 ...
- 使用【阿里云】服务器、【Xshell】搭建自己的【网站】—— { }
重置实例密码 打开Xshell连接主机 Apache 服务 安装 yum install httpd* -y 操作 启动 systemctl start httpd.service 查看状态 syst ...
- 一个注解解决ShardingJdbc不支持复杂SQL
背景介绍 公司最近做分库分表业务,接入了 Sharding JDBC,接入完成后,回归测试时发现好几个 SQL 执行报错,关键这几个表都还不是分片表.报错如下: 这下糟了嘛.熟悉 Sharding J ...
- 最新一线大厂Redis使用21条军规及详细解读
说明:个人原创,本人在一线互联网大厂维护着几千套集群,关于redis使用的一些坑进行了经验总结,希望能给大家带来一些帮助 适用场景:并发量大.访问量大的业务 规范:介绍军规内容 解读:讲解军规设置原因 ...
- PLM产品生命周期管理,包含哪些阶段?
PLM:Product Lifecycle Management=产品生命周期管理.产品的整个生命周期包括:投入期.成长期.成熟期.衰退期.结束期.PLM系统使企业可以把多年积累的所有产品相关数据放到 ...
- bat查找文件
举例如下 @dir > 1.txt /s /a /b d:\*.mp4 以后再作解释
- 全志H616基于官方外设开发-蜂鸣器
#include <stdio.h> #include <wiringPi.h> #include <unistd.h> #define BEEP 0 //设置针脚 ...
- Echarts中tooltip解决显示指定数据
今天开发中遇到一个问题,echarts图表触摸x轴触发tooltip会将x轴上所有的数据展示出来,但是有些场合只需要展示某些数据就可以,并不需要全部展示,如下图: 这里警戒线因为需要开关,所以使用填充 ...