【从入门到起飞】JavaSE—多线程(1)(实现方式,成员方法)

🎊专栏【JavaSE】
🍔喜欢的诗句:路漫漫其修远兮,吾将上下而求索。
🎆音乐分享【如愿】
🎄欢迎并且感谢大家指出小吉的问题🥰

文章目录

  • 🌺进程
  • 🌺线程
  • 🎄并发
  • 🎄并行
  • 🍔多线程的实现方式
    • 🛸方式一
    • 🛸方式二
      • ⭐注意
    • 🛸方式三
      • 🥰三种方法的对比
    • ✨成员方法
      • 🎈创建对象并执行
        • 🎆注意
      • 🎈线程优先级
      • 🎈守护线程
      • 🎈礼让线程
      • 🎈插入线程

在这里插入图片描述

🌺进程

进程是程序的基本执行实体
一个软件运行后,它就是一个进程
在这里插入图片描述

🌺线程

线程是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际运作单位

简而言之
是应用软件中互相独立,同时可以运行的功能
在这里插入图片描述

🎄并发

在同一时刻,有多个指令在单个CPU上交替执行

🎄并行

在同一时刻,有多个指令在多个CPU上同时执行

🍔多线程的实现方式

🛸方式一

1.自己定义一个类继承Thread
2.重写run方法
3.创建子类的对象,并启动线程

创建MyThread.java


public class MyThread extends Thread{
    @Override
    public void run(){
        //书写线程要执行的代码
        for (int i=0;i<100;i++){
            System.out.println(getName()+"关注一下吧");
        }
    }
}

创建Demo1.java


public class Demo1 {
    public static void main(String[] args) {
        MyThread t1=new MyThread();
        MyThread t2=new MyThread();

        t1.setName("线程一");
        t2.setName("线程二");

        //开启线程
        t1.start();
        t2.start();
    }
}

在这里插入图片描述
发现程序一会执行线程一,一会执行线程二

🛸方式二

1.自己定义一个类实现Runnable接口
2.重写里面的run方法
3.创建自己类的对象
4.创建一个Thread类的对象,并开启线程

创建MyRun.java


public class MyRun implements Runnable{
    @Override
    public void run() {
        //书写线程要执行的代码
        for (int i=0;i<100;i++){
            //获取到当前线程的对象
            Thread t=Thread.currentThread();
            System.out.println(t.getName()+"关注一下吧");
        }
    }
}

创建Demo1.java

public class Demo1 {
    public static void main(String[] args) {
        //创建MyRun的对象
        //表示多线程要执行的任务
        MyRun mr=new MyRun() ;

        //创建线程对象
        Thread t1=new Thread(mr);
        Thread t2=new Thread(mr);

        t1.setName("线程一");
        t2.setName("线程二");

        //开启线程
        t1.start();
        t2.start();
    }
}

在这里插入图片描述
发现程序一会执行线程一,一会执行线程二

⭐注意

在这里插入图片描述
原因
因为第一种方法是继承关系(extend),子类继承父类的方法
但是第二种方法没有继承关系,所以就不能这么使用

🛸方式三

这种方式可以获得多线程运行的结果

1.创建一个类MyCallable实现Callable接口
2.重写call(是有返回值的,表示多线程运行的结果)
3.创建MyCallable的对象(表示多线程要执行的任务)
4.创建FutureTask的对象(管理多线程运行的结果)
5.创建Thread类的对象,并启动(表示线程)

创建MyCallable.java

import java.util.concurrent.Callable;

public class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        //求1——100的和
        int sum=0;
        for (int i=0;i<100;i++){
            sum+=i;
        }
        return sum;
    }
}

创建Demo1.Java


import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class Demo1 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //创建MyCallable的对象(表示多线程要执行的任务)
        MyCallable mc=new MyCallable();
        //创建FutureTask的对象(管理多线程运行的结果)
        FutureTask<Integer>ft=new FutureTask<>(mc);
        //创建线程的对象
        Thread t1=new Thread(ft);
        //启动线程
        t1.start();

        //获取多线程运行的结果
        Integer result=ft.get();
        System.out.println(result);
    }
}

在这里插入图片描述

🥰三种方法的对比

在这里插入图片描述

✨成员方法

在这里插入图片描述

🎈创建对象并执行

创建Demo1.java

package IODemo6;

public class Demo1 {
    public static void main(String[] args) {
        //创建线程的对象
        MyThread t1=new MyThread("飞机");
        MyThread t2=new MyThread("大炮");

        //开启线程
        t1.start();
        t2.start();
    }
}

创建MyThread.java

package IODemo6;

public class MyThread extends Thread{
    public MyThread(){

    }
    public MyThread(String name){
        super(name);
    }
    @Override
    public void run(){
        for (int i=0;i<100;i++){
            System.out.println(getName()+"@"+i);
        }
    }
}

🎆注意

为什么会报错
在这里插入图片描述

原因

构造方法是不能继承的,如果子类想要使用父类的构造,那么需要自己写一个利用super关键字来调用父类的构造
在这里插入图片描述

🎈线程优先级

线程优先级越大,这条线程抢到CPU的概率就越大
在这里插入图片描述

🎈守护线程

当主线程结束后,守护线程也会结束

比如我们在传输文件的时候,传输文件是一个线程,聊天窗口是一个线程,我们把聊天窗口给关闭后,传输文件也不能进行,那么这个时候我们就可以把传输文件设置为守护线程
在这里插入图片描述

守护线程不是立刻结束的,是陆续结束的

在这里插入图片描述

🎈礼让线程

首先执行的线程会让出CPU的执行权,使执行结果更加均匀

在这里插入图片描述

🎈插入线程

在这里插入图片描述

如果大家对于文章的知识点有疑问,欢迎在评论区进行讨论

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

线性表但是是Java中数组实用使用

线性表定义&#xff1a; 由n (n≥0)个数据特性相同的元素构成的有限序列称为线性表&#xff0c;(n0)的时候被称为空表。 线性表的顺序表示 线性表的顺序存储又被称为顺序表 优点 无需为表示表中元素之间的逻辑关系而增加额外的存储空间可以随意读取任意位置的元素 缺点 插入…

商品购物管理与推荐系统Python+Django网页界面+协同过滤推荐算法

一、介绍 商品管理与推荐系统。本系统使用Python作为主要开发语言&#xff0c;前端采用HTML、CSS、BootStrap等技术搭建显示界面&#xff0c;后端采用Django框架处理用户的请求响应。 创新点&#xff1a;使用协同过滤算法&#xff0c;以用户对商品的评分作为依据&#xff0c;在…

[C国演义] 第二十二章

第二十二章 不同的子序列交错字符串 不同的子序列 力扣链接 两个数组的dp问题 (子序列 && 子数组(子串)) ⇒ 分区间来讨论 ⇒ dp[i][j] -- 在s数组的[0, i]区间内, 去寻找t数组在[0, j]这段子串的个数 状态转移方程 遍历顺序 初始化 需要使用左上角的情况 ⇒ dp…

筒仓料位监测|敢不敢对“精度”下狠手!您家筒仓料位测得准吗?

您家是不是还在人工敲仓估算&#xff1f; 您能精确知道料位和库存吗&#xff1f; 您能实时看到库存盈亏吗&#xff1f; 筒仓里装了什么&#xff1f;用了多少&#xff1f; 什么时候进料最划算&#xff1f; 您家的筒仓管理方式可靠吗&#xff1f; 上海思伟筒仓料位监测方案 看…

亚马逊出口电热毯日本PSE认证需要什么资料解析

电热毯出口日本需要办理PSE认证&#xff0c;电热毯&#xff0c;又名电褥&#xff0c;是一种接触式电暖器具。 PSE认证介绍是日本强制性认证&#xff0c;包含安全及EMI&#xff0c;用以证明电子电气等产品符合日期电气用品安全法或国际IEC标准的要求。日本电气用品安全法规定&am…

vue-waterfall2 实现瀑布流,及总结的问题

注意&#xff1a;引入需要在主界面引入&#xff0c;直接在组件中引用会有问题 1.安装 npm install vue-waterfall21.8.20 --save &#xff08;提示&#xff1a;一定要安装1.8.20&#xff0c;最新版会有一部分问题&#xff09; 2.打开main.js文件 import waterfall from v…

解析SOLIDWORKS教育版与企业版:选择合适版本,助力创新设计

SOLIDWORKS作为领先的三维CAD软件&#xff0c;旨在为工程设计、产品开发和创新提供全面支持。在SOLIDWORKS产品线中&#xff0c;教育版和企业版是两种常见的版本。让我们来了解一下它们之间的区别和特点。 SOLIDWORKS教育版&#xff1a;学习、探索、启发创新 面向教育和学术&…

电子邮件解决方案有哪些?邮件系统的问题?

如何选择适合的邮件解决方案&#xff1f;免费稳定企业邮箱系统&#xff1f; 电子邮件都是我们常用的工具。但是&#xff0c;随着电子邮件使用越来越普遍&#xff0c;如何有效地管理邮件也成了一个重要的问题。蜂邮EDM将介绍几种常见的电子邮件解决方案&#xff0c;帮助大家更好…

一篇文章让你彻底了解Java算法「十大经典排序算法」

✍️作者简介&#xff1a;码农小北&#xff08;专注于Android、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f449;关注✨、点赞&…

linux上安装qt creator

linux上安装Qt Creator 1 Qt Creator 的下载 下载地址为&#xff1a;http://download.qt.io/archive/qt/ 根据自己的需求选择Qt Creator版本&#xff0c;这里我下载的是5.12.9&#xff0c;如下图所示&#xff1a; 在ubuntu上可以使用wget命令下载安装包&#xff1a; wget h…

外贸ERP系统是什么?推荐的外贸管理软件?

外贸ERP管理系统有哪些&#xff1f;海洋建站管理软件的功能&#xff1f; 为了更有效地处理外贸业务&#xff0c;许多企业正在寻找先进的工具和技术。为了提高效率、降低成本并增强竞争力&#xff0c;越来越多的外贸企业正在转向外贸ERP系统。那么&#xff0c;外贸ERP系统究竟是…

Java基本数据类型与引用类型的区别

晒个小暖 南方人的冬天&#xff0c;太阳总是很赏脸&#xff0c;花花草草长得很漂亮&#xff0c;厚棉被晒得很舒服&#xff0c;腊肠腊肉腊鸭油光发亮&#xff0c;就这样站在日光下一会吧&#xff0c;你也会变得亮亮堂堂&#xff0c;和和融融。不管是不是冬天&#xff0c;没有什…

c++面向对象

一、类和对象 类将具有共性的数据和方法封装在一起&#xff0c;加以权限区分&#xff0c;用户只能通过公共方法 访问私有数据。 类的权限分为&#xff1a;private&#xff08;私有&#xff09;、protected&#xff08;保护&#xff09;、public&#xff08;公有&#xff09;3种…

2013年12月13日 Go生态洞察:Go在App Engine上的工具、测试和并发

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

2023年中国聚氨酯树脂涂料需求量、市场规模及行业趋势分析[图]

聚氨酯是一种新兴的有机高分子材料&#xff0c;被誉为“第五大塑料”&#xff0c;因其卓越的性能而被广泛应用于国民经济众多领域。产品应用领域涉及轻工、化工、电子、纺织、医疗、建筑、建材、汽车、国防、航天、航空等。2022年中国聚氨酯产量已达1600万吨。 2012-2022年中国…

华为防火墙 DMZ 设置

DMZ 是英文"Demilitarized Zone"的缩写&#xff0c;中文名称为"隔离区" 它是为了解决安装防火墙后外部网络不能访问内部网络服务器的问题&#xff0c;而设立的一个位于内部网络与外部网络之间的缓冲区&#xff0c;在这个网络区域内可以放置一些公开的服务…

半导体电学特性IV+CV测试系统—1200V半导体参数分析仪

概述&#xff1a; SPA-6100半导体参数分析仪是武汉普赛斯自主研发、精益打造的一款半导体电学特性测试系统&#xff0c;具有高精度、宽测量范围、快速灵活、兼容性强等优势。产品可以同时支持DC电流-电压(I-V)、电容-电压(C-V)以及高流高压下脉冲式I-V特性的测试&#xff0c;旨…

asp.net勤工助学管理系统VS开发sqlserver数据库web结构c#编程计算机网页项目

一、源码特点 asp.net 勤工助学管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 系统运行视频 https://www.bilibili.com/video/BV1Sz4y1F7GP/ 二、功能介绍 本系统使用Microsoft Visual Studio…

使用遗传算法优化的BP神经网络实现自变量降维

大家好&#xff0c;我是带我去滑雪&#xff01; 在现实生活中&#xff0c;实际问题很难用线性模型进行描述。神经网络的出现大大降低了模型建立的难度和工作量。只需要将神经网络当作一个黑箱子&#xff0c;根据输入和输出数据&#xff0c;神经网络依据相关的学习规则&#xff…

MAX/MSP SDK学习03:Atoms and Messages的使用

今天终于把Message消息选择器看得有点头绪了&#xff0c;主要是这个官方英文文档理解起来有点抽象。 编写IsMatchABC自定义Object&#xff0c;要求&#xff1a; ①若左入口&#xff08;入口0&#xff09;收到 "int" 型消息&#xff0c;则从出口发送数值 "888&q…