【多线程】线程的创建

news2024/11/25 3:06:04

创建线程如下几个方法:

目录

继承Thread类

调用start方法启动线程

调用run方法

实现Runnable接口

实现Callable接口


继承Thread类

调用start方法启动线程

public class TestThread extends Thread{

    //继承Thread类
    //重写run方法
   
    public void run(){
        for(int i=0;i<5;i++){
            System.out.println("你好");
        }
    }


    public static void main(String[] args) {
        //main线程  主线程

        //创建一个线程对象
        TestThread testThread=new TestThread();
       //调用start方法
        testThread.start();

        for(int i=0;i<5;i++){
            System.out.println("我在学习多线程");
        }
    }
}

 预期结果是两个线程同时进行,交替进行

调用run方法

通常需要重写Thread类中的此方法.将创建的线程要执行的操作声明在此方法中

public class TestThread extends Thread{

    //继承Thread类
    //重写run方法
 
    @Override
    public void run(){
        for(int i=0;i<200;i++){
            System.out.println("你好");
        }
    }


    public static void main(String[] args) {
        //main线程  主线程

        //创建一个线程对象
        TestThread testThread=new TestThread();
        //调用run方法
        testThread.run();

        for(int i=0;i<500;i++){
            System.out.println("我在学习多线程");
        }
    }
}

 预期结果:先进行run方法,输出(你好),后输出(我在学习多线程)

实现Runnable接口

1.定义MyRunnable类实现Runnable接口

2.实现run(),编写线程执行体

3.创建线程对象,调用start()方法启动线程

package org.example;


//调用Runnable接口,重写run方法
public class TestRunable implements Runnable {

    //继承Thread类
    //重写run方法
    @Override
    public void run(){
        for(int i=0;i<200;i++){
            System.out.println("你好");
        }
    }


    public static void main(String[] args) {
        //main线程  主线程

        //创建一个Runnable接口的实现类对象
        TestRunnable teatRunnable=new TestRunnable();

        //创建线程对象,通过线程对象开启线程
        Thread thread=new Thread(test2Thread);

        thread.start();

        for(int i=0;i<500;i++){
            System.out.println("我在学习多线程");
        }
    }
}

实现Callable接口

package org.example;

import java.util.concurrent.*;

public class TestCallable implements Callable<String> {
    private int num;
    private String text;

    public TestCallable(int num, String text) {
        this.num=num;
        this.text=text;
    }

    @Override
    public String call() {
       TextPrint textPrint=new TextPrint();
       textPrint.Print(num,text);
        return "Hello World";
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        //创建callable接口的实现类对象
        TestCallable t1=new TestCallable(1,"我在");
        TestCallable t2=new TestCallable(1,"学习");
        TestCallable t3=new TestCallable(1,"多线程");

        //创建执行服务
        ExecutorService ser= Executors.newFixedThreadPool(3);

        //提交执行
        Future<String> r1=ser.submit(t1);
        Future<String> r2=ser.submit(t2);
        Future<String> r3=ser.submit(t3);
        //获取结果
        String a1=r1.get();
        String a2=r2.get();
        String a3=r3.get();

        /*//关闭服务
        ser.shutdownNow();*/
    }


class   TextPrint {
    public void Print(int num, String text) {
        for (int i = 0; i < num; i++) {
            System.out.println(text);
        }
    }
}
}

得到一个多线程的结果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1171033.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#文件操作从入门到精通(3)——Txt文件读写操作

前言: 我们在开发c#程序时,经常需要对txt文本文件进行操作,有时候是读取txt文本中的内容,有时候是将程序运行过程中的一些数据写入到txt文本中做记录,为了帮助大家学习txt文本的操作,我特意开发了一个“txt文件操作学习”winform小软件,该软件调用了我封装的txt文件操作…

[尚硅谷React笔记]——第9章 ReactRouter6

目录&#xff1a; 课程说明一级路由重定向NavLink高亮useRoutes路由表嵌套路由路由的params参数路由的search参数路由的state参数编程式路由导航useRouterContextuseNavigationTypeuseOutletuseResolvedPath()总结项目地址 1.课程说明 概述 React Router以三个不同的包发布…

【C++】红黑树模拟实现STL中的map与set

红黑树里面具体存的是什么类型的元素&#xff0c;是由模板参数 T 来决定&#xff1a; 如果 T 是 Key 那么就是 set。 如果 T 是 pair<const Key, V>&#xff0c;那么就是 map。 1、定义红黑树的节点结构 // 定义红黑颜色 enum Colour {RED,BLACK };template<class …

memcpy()之小端模式

函数原型 void memcpy(voiddestin, const void *src, size_t n); 功能 由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。 头文件 #include<string.h> 返回值 函数返回一个指向dest的指针。 例1&#xff1a;如果用来复制字…

wordpress版本识别

wordpress版本识别 1.通过RSS Feed识别 RSS Feed参考 访问网站/feed或者?feedrss 例如 默认结构&#xff1a;https://www.example.com/?feedrss2 其他结构&#xff1a;https://www.example.com/feed/ 返回结果中搜索 generator 可以看到直接是5.9.7版本 2.wpscan等工具扫一…

Java8 Stream API全面解析——高效流式编程的秘诀

文章目录 什么是 Stream Api?快速入门流的操作创建流中间操作filter 过滤map 数据转换flatMap 合并流distinct 去重sorted 排序limit 限流skip 跳过peek 操作 终结操作forEach 遍历forEachOrdered 有序遍历count 统计数量min 最小值max 最大值reduce 聚合collect 收集anyMatch…

用WebStorm运行VUE项目

提示&#xff1a;原来用VS Code开Vue&#xff0c;可是VS Code用Ctrl打不开国际化&#xff0c;下载推荐插件也不好使 文章目录 下载WebStorm运行WebStorm实用插件 下载WebStorm 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; https://www.jetbrains.com/webs…

国家管网集团古浪—河口天然气联络管道工程实现投产

10月26日&#xff0c;国家管网集团古浪—河口天然气联络管道工程实现“绿色”投产&#xff0c;进一步完善西北地区多通道供气网络&#xff0c;对于推动甘肃省“一核三带”新发展格局构建、提高“全国一张网”在甘青地区的供应保障能力具有重要意义。 古浪—河口天然气联络管道…

SpringBoot条件注解底层原理

一、简介 相信大家在学springBoot自动装配的时候会遇到下面这些条件注解&#xff0c;当存在其指定的条件&#xff0c;才会把对应的bean注入到IOC容器中。本博客旨在揭开其神秘的面纱&#xff01; 其实说白了&#xff0c;springBoot的这些注解只是针对普通spring框架中Conditi…

JSP 学生成绩查询管理系统eclipse开发sql数据库serlvet框架bs模式java编程MVC结构

一、源码特点 JSP 学生成绩查询管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;比较流行的servlet框架系统具有完整的源代码和数据库&#xff0c;eclipse开发系统主要采用B/S模式 开发。 java 学生成绩查询管理系统 代码下载链接…

CorelDRAW2023最新版本号24.5.0.731

CDR2023是一款近年来备受瞩目的工具软件&#xff0c;它提供了数据存储、分析以及处理的能力。但是&#xff0c;对于许多用户来说&#xff0c;CDR2023到底好用不好用还需要进行深入的分析和探讨。在本文中&#xff0c;我们将从多个角度分析CDR2023这款软件。 CorelDRAW2023版win…

【JMeter参数化】上一个接口返回作为下一个接口入参

前言: 实际工作场景当中,比如获取到商品列表,并查看商品详情。如果将商品id写死,就很笨拙。所以我们可以进行参数化动态去更新商品id 目录 场景1:接口A仅取一个值,作为接口B的入参 场景:接口A是获取教师列表中某个教室的id,接口B是查看该教师的详情页步骤: 1.获取接口…

DC系列 DC:4

DC:4 靶机 文章目录 DC:4 靶机信息收集IP端口收集网页信息收集网站信息收集bp爆破 反弹shellnc反弹 内网信息收集收集jim用户的密码密码爆破 Charles用户密码收集 提权teehee提权 备注 信息收集 IP端口收集 用arp-scan 网段锁定ip nmap对端口服务进行详细扫描nmap -p- -sV …

图片复制上传,拖拽输入框上传,el-upload自定义上传方法(上传和备注框强关联)

1. 效果图&#xff1a; 2. 复制图片使用的方法&#xff1a; 1.通过监听paste方法&#xff0c;获取复制内容2.获取复制内容中的clipboardData3.获取file文件进行上传 <input paste.native"handlePaste" />handlePaste(value){let files value.clipboardData…

win10 + vs2017 + cmake3.17编译tiff-4.0.9

前言&#xff1a; 需要先编译依赖库&#xff1a;zlib-1.2.11, jpeg-9b 我的安装根目录是&#xff1a;D:\Depend_3rd_party\tiffx64 1. 下载tiff-4.0.9.zip&#xff0c;并解压到根目录下 得到&#xff1a;D:\Depend_3rd_party\tiffx64\tiff-4.0.9 2. 创建build文件夹&#xff…

链栈的练习

链栈练习 相关内容&#xff1a;栈的链式存储结构&#xff08;链栈&#xff09; //链栈的初始化、判空、入栈、出栈、读取栈顶元素 //链栈的结点&#xff1a;数据域、指针域 #include<stdio.h> #include<stdlib.h> typedef int Status; #define OK 1 #define ERRO…

二维码智慧门牌管理系统升级:实现一标六实数据管理

文章目录 前言一、一标六实数据管理应用的关键特点二、一标六实数据管理应用的具体应用 前言 随着城市的发展&#xff0c;对基础数据的精确管理和快速查询需求日益增强。为满足这一需求&#xff0c;二维码智慧门牌管理系统进行了升级&#xff0c;提供一标六实数据管理应用&…

全自动洗衣机什么牌子好?内衣洗衣机品牌排行榜前四名

随着内衣洗衣机的流行&#xff0c;很多小伙伴在纠结该不该入手一款内衣洗衣机&#xff0c;专门来洗一些贴身衣物&#xff0c;答案是非常有必要的&#xff0c;因为我们现在市面上的大型洗衣机只能做清洁&#xff0c;无法对我们的贴身衣物进行一个高强度的清洁&#xff0c;而小小…

[自定义 Vue 组件] 小尾巴顶部导航栏(2.0) TailTopNav

文章归档&#xff1a;https://www.yuque.com/u27599042/coding_star/oglrqteg8fzvvzn0 [自定义 Vue 组件] 响应式顶部导航栏(1.0) TopNav&#xff1a;https://www.yuque.com/u27599042/coding_star/hzltsltxgavwx8u2 组件效果示例 组件所依赖的子组件 [自定义 Vue 组件] 小尾巴…

node插件express(路由)的基本使用(一)

文章目录 一、express的了解1.定义2.作用3.使用express的前提条件&#xff08;1&#xff09;如果是新文件夹需要薪资package.json文件&#xff0c;如果有就忽略&#xff08;2&#xff09;安装第三方依赖包&#xff08;3&#xff09;在使用的地方导入express 二、express的基本使…