方法一:继承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多线程的几种创建方式的更多相关文章

  1. java多线程的两种创建方式

    方式一:继承Thread类 1.创建一个继承于Thread类的子类 2.重写Thread类的run()方法---> 将此线程执行的操作声明在run()中 3.创建Thread类的子类的对象 4. ...

  2. Java多线程的三种实现方式

    java多线程的三种实现方式 一.继承Thread类 二.实现Runnable接口 三.使用ExecutorService, Callable, Future 无论是通过继承Thread类还是实现Ru ...

  3. java多线程的几种实现方式

    java多线程的几种实现方式 1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target3.通 ...

  4. 阿里巴巴--java多线程的两种实现方式,以及二者的区别

    阿里巴巴面试的时候,昨天问了我java面试的时候实现java多线程的两种方式,以及二者的区别当时只回答了实现线程的两种方式,但是没有回答上二者的区别: java实现多线程有两种方式: 1.继承Thre ...

  5. java中多线程的两种创建方式

    一丶继承Thread类实现多线程 第一步:继承Thread类第二步:重写run()方法第三步:创建继承了Thread类的对象 , 调用start()方法启动. //线程创建方式一 : /* 第一步:继 ...

  6. Java多线程学习(二)---线程创建方式

    线程创建方式 摘要: 1. 通过继承Thread类来创建并启动多线程的方式 2. 通过实现Runnable接口来创建并启动线程的方式 3. 通过实现Callable接口来创建并启动线程的方式 4. 总 ...

  7. Java多线程的两种实现方式

    Java总共有两种方式实现多线程 方式1:通过继承Thread类的方式 package com.day04; /** * 通过继承Thread类并复写run方法来是实现多线程 * * @author ...

  8. java线程的3种创建方式及优缺点

    线程创建简介 1.在java中表示线程的是Thread类.无论是那种方式创建线程,本质上都是创建Thread类的对象. 2.Thread类继承Runnable接口,且也有以Runnable作为参数的构 ...

  9. java 多线程编程三种实现方式

    一种是继承Thread类,一种是实现Runable接口,还有一种是实现callable接口: 有博主说只有前面2种方式,我个人愚见是三种,主要详细介绍下callable的使用: 三种线程的我的个人理解 ...

随机推荐

  1. 动态规划——leetcode5、最长回文子串

    1.题目描述: 2.解题方法:动态规划 动态规划解题步骤: 1.确定状态 最后一步:如果s[i,...,j]是回文子串,那么需要满足两个条件 ① s[i] == s[j]: ② s[i+1,...,j ...

  2. PerfView专题 (第十二篇):对 C# 下的 SDK 类库进行监控(大结局)

    一:背景 本篇是我们系列文章的最后一篇,前面的文章中大多是在 CLR Runtime 以及 OS 层面进行监控来发现各种可疑的程序问题,除了这两个层面,其实我们还可以对 SDK 中一些类进行洞察,比如 ...

  3. Codeforces Round #604 (Div. 2) -D

    Problem - D - Codeforces 题意 : 有 a 个0,b个1,c个2,d个3,构成一个序列,使得每两个数字之间的差值为1 题解: 就是以四种数字分别为起点,暴力模拟 #includ ...

  4. PostgreSQL 绑定变量窥探

    今天我们要探讨的是 custom执行计划和通用执行计划.这一技术在 Oracle中被称为绑定变量窥视.但 Kingbase中并没有这样的定义,更严格地说,Kingbase叫做custom执行计划和通用 ...

  5. 安装docker及使用docker安装其他软件(手动挂载数据卷)

    中秋明月,豪门有,贫家也有,极慰人心 Linux安装docker 可以参考官方的安装文档 centos安装docker: https://docs.docker.com/engine/install/ ...

  6. Java 多线程:基础

    Java 多线程:基础 作者:Grey 原文地址: 博客园:Java 多线程:基础 CSDN:Java 多线程:基础 顺序.并行与并发 顺序(sequential)用于表示多个操作『依次』处理.比如把 ...

  7. 银河麒麟v4_sp4安装英伟达驱动

    bios设置视频输出为auto模式 视频线插独立显卡上 先dpkg 安装两个deb包 1.禁用开源驱动:sudo vim /etc/modprobe.d/blacklist.conf,在里面添加 bl ...

  8. C语言001--hello world编译详解

    1.编写hello.c程序,并编译运行 book@100ask:~/linux/c01$ cat hello.c -n 1 #include <stdio.h> 2 3 int main( ...

  9. [开源]React/Vue通用的状态管理框架,不好用你来打我👀

    为了防止被打,有请"燕双鹰"镇楼️‍♀️️‍️‍...o... 话说新冠3年,"状态管理框架"豪杰并起.群雄逐鹿,ReduxToolkit.Mobx.Vuex. ...

  10. Visual Studio 2022 Community 不完全攻略

    0. 前言 建议结合视频阅读哦 Visual Studio 2022 Community 不完全攻略 有问题或者意见欢迎评论 ! 1. 下载&安装 Visual Studio Communit ...