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的使用: 三种线程的我的个人理解 ...
随机推荐
- pathlib路径问题
下面是我的文件框架 app ------ file1---- .py1 file2---- .py2 config.py 我在config文件中设置了变量参数 BASE_DIR = pathlib.P ...
- OpenStack云计算平台部署(单节点)
环境配置 虚拟机(centos7 .内存8G.硬盘300G.处理器4核并开启intel vt-x,网络模式设置为NAT,虚拟机网络一定要设置好,并可以ping通baidu,不然有中途掉IP的情况发生) ...
- Filebeat Nginx Module 自定义字段
Filebeat Nginx Module 自定义字段 一.修改/usr/local/nginx/conf/nginx.conf中 log_format access '$remote_addr - ...
- 关于 JavaScript 中 null 的一切
原文地址:Everything about null in JavaScript 原文作者:Dmitri Pavlutin 译者:Gopal JavaScript 有两种类型:原始类型(strings ...
- [Python]-json模块-处理字典数据的存取
import json 函数 json.dumps() json.dumps()函数是将字典转化为字符串 json.loads() json.loads()函数是将字符串转化为字典 注意: 从json ...
- 【项目实战】自备相机+IMU跑通Vins-Mono记录
前言 初次接触SLAM,公司要求用自己的设备来跑通vinsmono这个程序,虽然已经跑通了别人的数据包,但是真正自己上手来运行这个程序,发现真的是困难重重,特意在此记载下来整个过程,以供大家参考. 我 ...
- es,logstash各版本对应要求的JDK版本,操作系统对应示意图
官网地址:https://www.elastic.co/cn/support/matrix
- Elastic App Search 入门
官方文档地址:https://swiftype.com/documentation/app-search/getting-started Elastic App Search 架构图: 它的特点是帮助 ...
- vue中使用html video标签,写中间暂停图标
一篇汇总video事件的文章,方便查阅: https://blog.csdn.net/xuehu837769474/article/details/107532487 html部分 <div c ...
- Java调用C++动态链接库——Jni
最近项目需要,将C++的算法工程编译成动态链接库,交给 Java后台当作函数库调用.就去了解了下Jni.使用起来还是比较方便的. 1. 首先编写Java的调用类.例如: public clas ...