java线程基础

news2025/7/4 11:01:04

最近,想弄一个雪花飘落,结果,搞了两三个小时没弄出来。主要是雪花飘落可能需要用到线程。有人是通过一个雪花去实现,然后通过集合去实现漫天雪花。不管怎么说,做开发,可能线程学习也是一块绕不过去的大山。

一.线程和进程

1.什么是进程?

进程是正在运行的程序。 举例:Windows任务管理器中的进程

  • 是系统进行资源分配和调用的独立单位
  • 每一个进程都有它自己的内存空间和系统资源。

 

2.什么是线程?

线程:进程中单个顺序控制流,是一条执行路径。

单线程:一个进程如果只有一条执行路径,则称为单线程程序。举例:记事本程序

多线程:一个进程如果有多条执行路径,则成为多线程程序    举例:扫雷程序

  • 线程是程序中执行的线程。 Java虚拟机允许应用程序同时执行多个执行线程。

二..线程的创建方式

实现方式一:继承Thread类

将一个类声明为一个Thread的子类。 这个子类应该重写run类的方法Thread 。 然后可以分配并启动子类的实例。

简述就是:

  • 定义一个类MyThread继承Thread类
  • 在My Thread类中重写run()方法
  • 创建My Thread类的对象
  • 启动线程
public class MyThread extends Thread{
    @Override
    public void run() {
        for(int i=0;i<100;i++)
        {
            System.out.println(i);
        }

    }
}
public class MyThreadDemo {
    public static void main(String[] args) {
        MyThread my1=new MyThread();
        MyThread my2=new MyThread();
        my1.run();
        my1.run();
        System.out.println("\n");
        my1.start();
        my2.start();
    }
}

 

 问题:

  • 为什么要重写run()方法?

因为run()是用来封装被线程指向的代码

  • run()方法和start()方法的区别?

run():封装线程执行的代码,直接调用,相当于普通方法的调用。

start():启动线程;然后由虚拟机调用此线程的run()方法。

实现方式二: 实现Runable接口

  • 声明一个实现Runnable接口的类。 那个类然后实现了run方法。 然后可以分配类的实例,在创建Thread时作为参数传递,并启动。

      

public class MyRunnable implements Runnable{
    @Override
    public void run() {
      for(int i=0;i<100;i++)
      {
          System.out.println(Thread.currentThread().getName()+":"+i);
      }
    }
}
public class MyRunnableDemo {
    public static void main(String[] args) {
        //创建对象
        MyRunnable my=new MyRunnable();

        Thread t1=new Thread(my);
        Thread t2=new Thread(my);
        t1.start();
        t2.start();
    }
}

 小结:多线程实现方式有两种: 1.继承Thread类 2.实现Runable接口

相比于继承Thread类,实现Runnable接口的好处

  • 避免java单继承的局限性
  • 适合多个相同程序的代码去处理同一个资源的情况,把线程和程序的代码,数据有效分离,较好的体现了面向对象的设计思想。

 

三.获取当前线程名 

public class MyThread extends Thread{
    @Override
    public void run() {
        for(int i=0;i<100;i++)
        {
            System.out.print(getName()+":"+i+" ");
        }

    }
}

测试类保持不变,最后运行得 

 

public class MyThreadDemo {
    public static void main(String[] args) {
        MyThread my1=new MyThread();
        MyThread my2=new MyThread();
//获取当前正在运行的线程对象的名称
        System.out.println(Thread.currentThread().getName());
    }
}

 

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

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

相关文章

【JavaWeb】jsp

文章目录⭐️ 一.jsp概念及其作用⭐️ 二.jsp的本质⭐️三.jsp的三种语法⭐️四.jsp的九大内置对象⭐️五.jsp四大域对象⭐️六.jsp中的out输出和response.getWriter输出的区别⭐️七.jsp的常用标签⭐️八.Listener监听器⭐️ 一.jsp概念及其作用 1.概念:jsp的全称是java serv…

SpringMVC框架中的异常处理机制

目录 1. 什么是异常处理&#xff1f; 2. SpringMVC框架中的异常处理机制是什么&#xff1f; 3. SpringMVC框架汇中实现异常处理的实现步骤 4. SpringMVC框架出现异常时候的处理过程 5. 附手写代码&#xff0c;并含有注释 1. 什么是异常处理&#xff1f; http://t.csdn.cn/x…

【线性代数】四、二次型

第四章 二次型 文章目录第四章 二次型一、二次型定义二、合同变换1.线性变换2.矩阵合同标准型和规范型3.惯性定理三、正定二次型一、二次型定义 如果系数aij全为实数&#xff0c;那么为实二次型。上述二次型展开式可表示用矩阵为 可以看出&#xff0c;二次型矩阵A是一个对称矩…

做了8年前端,细说那些曾经让你浴霸不能的后端

说明&#xff1a;本文并没有针对某位大哥大姐&#xff0c;看见如果觉得好笑的就笑一笑&#xff0c;如果被戳中了你的过往&#xff0c;请不要气愤&#xff0c;人活着嘛&#xff0c;开心最重要。 A 曾经有个后端&#xff0c;我要调一个详情。他告诉我传id&#xff0c;然后测试的…

LeetCode 790. 多米诺和托米诺平铺

LeetCode 790. 多米诺和托米诺平铺一、题目&#xff08;经典动态规划&#xff09;二、解题思路1. 铺满2*N面积&#xff1a;2. 对于第i列&#xff0c;有4种情况&#xff1a;3. N-1 -> N 转移方程&#xff1a;三、核心代码四、代码中存在的一些知识性问题1. 二层vector的定义、…

浅谈JVM

内存结构&#xff1a; 程序计数器&#xff08;寄存器&#xff09; 作用&#xff1a;记住下一条jvm指令的执行地址 特点&#xff1a; 是线程私有的 不会出现内存溢出 虚拟机栈 虚拟机栈&#xff1a;是描述java方法执行的内存模型&#xff0c;每个方法在执行的同时都会创建…

生信初学者必知的镜像设置

文章目录Ubuntu镜像conda镜像R语言镜像Python镜像Julia镜像国内网络问题很烂&#xff0c;大家都知道&#xff0c;github、pubmed这些网站经常访问不了&#xff01;如果你平常会用到Ubuntu、conda、R语言、Python、Julia&#xff0c; 那你肯定为安转各种包、库、软件而烦恼过&am…

​草莓熊python turtle绘图代码(玫瑰花版)附源代码

​草莓熊python turtle绘图代码&#xff08;玫瑰花版&#xff09;附源代码 目录 一、前言 二、草莓熊手持玫瑰花成品效果图 三、代码演示方法和代码命令解释 四、草莓熊手持的玫瑰花源代码 五、相关资源图片 六、我的“草莓熊python turtle绘图&#xff08;玫瑰花版&…

Sparse编码和字典学习(1)基础知识和python简单实现

Sparse编码和字典学习1. 稀疏表示与字典学习简介1.1 Motivation1.2 字典学习的流程1.3 字典学习的数学模型2 python实现2.1字典学习2.1 稀疏性统计和误差计算参考资料和文献1. 稀疏表示与字典学习简介 1.1 Motivation 字典学习的思想应该源来实际生活中的字典的概念。字典是前…

谷粒商城 -- 项目环境搭建

注&#xff1a;以下的项目环境搭建过程&#xff0c;适用于所有的微服务项目的环境搭建&#xff0c;以后做微服务项目的时候看着这个笔记进行搭建环境即可 一、项目微服务划分图 二、Linux安装Docker 三、Docker安装mysql / redis 四、Vscode下载安装 五、谷粒项目结构创建&a…

碎片化学习Python的又一神作:termux

什么是Termux&#xff1f; 据Termux官网介绍&#xff0c;Termux是一个Android终端仿真器和Linux环境应用程序&#xff0c;运行于内部存储&#xff08;不在SD卡上&#xff09;&#xff0c;无需root或设置。 系统自动进行最小化安装&#xff0c;使用APT软件包管理器安装其它软件…

【成为红帽工程师】第三天 web服务器

目录 一、www简介 二、网址及http简介 三、www服务器的类型 四、www服务器的基本配置 五、相关实验 一、www简介 &#xff08;一&#xff09;什么是www www是world wide web的缩写&#xff0c;也就是全球信息广播的意思。通常说的上网就是使用www来查询 用户所需要的信息…

【十问十答】回归模型知识点

1. 线性回归的假设是什么 线性回归有四个假设&#xff1a; 线性&#xff1a;自变量&#xff08;x&#xff09;和因变量&#xff08;y&#xff09;之间应该存在线性关系&#xff0c;这意味着x值的变化也应该在相同方向上改变y值。 独立性&#xff1a;特征应该相互独立&#xf…

[附源码]java毕业设计大学生足球预约信息

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【Java基础】泛型+反射+枚举+Lambda表达式 知识点总结

【大家好&#xff0c;我是爱干饭的猿&#xff0c;本文重点介绍Java基础&#xff1a;泛型、反射、枚举、Lambda表达式知识点总结。 后续会继续分享其他重要知识点总结&#xff0c;如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下吧】 上一篇文章&#x…

Redis安装与配置 LInux Centos

1.介绍Redis Redis 是完全开源免费的&#xff0c;遵守BSD协议&#xff0c;内存中的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中间件。 特点&#xff1a; 支持数据的持久化&#xff0c;可以将内存中的数据保存到硬盘&#xff0c;在重启后再次加载使用。 支持…

Navigation 组件使用入门

Navigation 组件使用入门https://developer.android.google.cn/guide/navigation/navigation-getting-started 添加依赖 dependencies {def nav_version "2.5.2"implementation "androidx.navigation:navigation-fragment:$nav_version"} 创建导航图 …

LeetCode 752. 打开转盘锁

今天在看bfs模板的时候看到了一个题目&#xff0c;解密码锁的这道题&#xff0c;半天也没啥思路和行动力&#xff0c;看了人家的java版的注释&#xff0c;花了40分钟才搞懂这个题&#xff0c;也真的是菜。写完之后发现这个题目还可以去优化&#xff0c;用双向bfs去解决&#xf…

Android App开发超实用实例 | 约束布局

从多个角度介绍约束布局设计中的控件定位。 01、约束布局基础 从 Android Studio 2.3版本起&#xff0c;约束布局是Android Studio布局文件的默认布局。其他布局方式在实现复杂一些的布局设计时存在多种或多个布局嵌套的情况&#xff0c;设备调用这样的布局文件就需要花费更多…

(未整理完)十月每日一题打卡

每日打卡 10.1 [重新格式化电话号码 lc1694](1694. 重新格式化电话号码 - 力扣&#xff08;LeetCode&#xff09;) 模拟题&#xff1a;特殊情况就是在最后划分完全部三个之后&#xff0c;还剩四个需要变成aa-bb class Solution { public:string reformatNumber(string number…