线程--相关概念、两种创建线程的方式

news/2025/9/23 22:29:09/文章来源:https://www.cnblogs.com/lulu14/p/19108290

线程基础

一、线程相关概念

程序:是为完成特定任务、用某种语言编写的一组指令的集合。简单的说:就是我们写的代码

进程

  1. 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为进程分配内存空间。当我们使用迅雷,又启动了一个进程,操作系统将为迅雷分配新的空间
  2. 进程是程序的一次执行过程,或是正在运行的一个程序。是动态过程:有它自身的产生、存在和消亡的过程

线程

  1. 线程由进程创建的,是进程的一个实例
  2. 一个进程可以拥有多个线程

其他相关概念

  1. 单线程:同一个时刻,只允许执行一个线程
  2. 多线程:同一个时刻,可以执行多个线程,比如:一个qq进程,可以同时打
    开多个聊天窗口,一个迅雷进程,可以同时下载多个文件
  3. 并发:同一个时刻,多个任务交替执行,造成一种“貌似同时”的错觉,简
    单的说,单核cpu实现的多任务就是并发。
  4. 并行:同一个时刻,多个任务同时执行。多核CPU可以实现并行

二、线程的基本使用

2.1 创建线程的两种方法

在Java中线程来使用有两种方法:

  1. 继承Thread类,重写run方法

  2. 实现Runnable接口,重写run方法

继承Thread类

线程2.1.1

案例:

1)请编写程序,开启一个线程,该线程每隔1秒。在控制台输出“喵喵,我是小猫咪”

2)对上题改进:当输出80次 喵喵,我是小猫咪,结束该线程

3)使用JConsole 监控线程执行情况,并画出程序示意图!

public class Thread01{public static void main(String[] args){//创建一个Cat对象,可以当作线程使用Cat cat = new Cat();//读源码/*(1)public synchronized void start(){start0();}(2)//start0() 是本地方法,是JVM调用,底层是c/c++实现//真正实现多线程的效果,是 start0(),而不是 run()private native void start0();*/cat.start();//启动线程->最终会执行cat的run方法//cat.run();为什么不像这样直接调用run?//run方法就是一个普通方法,如果直接调用run就不会启动子线程,即阻塞在这运行完run()再向下继续执行。只有主线程。//说明:当main线程启动一个子线程 Thread-0,主线程不会阻塞,会继续执行//这是 主线程和子线程交替进行System.out.println("主线程继续执行" + Thread.currentThread().getName);for(int i = 0; i < 60; i++){System.out.println("主线程 i=" + i);}}
}//说明
//1.当一个类继承了 Thread 类,该类就可以当作线程使用
//2.我们会重写 run方法,写上自己的业务逻辑
//3.run Thread 类,实现了 Runnable 接口的run方法
/*@Overridepublic void run(){if(target != null){taeget.run();}}
*/
class Cat extends Thread{int times = 0;@Overridepublic void run(){//重写run方法,写上自己的业务逻辑while(true){//每隔1秒。在控制台输出“喵喵,我是小猫咪”System.out.println("喵喵,我是小猫咪" + (++times));//让该线程休眠1秒 ctrl+alt+t,选try...catch...//sleep内的时间是按毫秒计算try{Thread.sleep(1000);} catch(InterruptedException e){e.printStackTrace();}if(times == 80){break;//当times 到80,退出while,这时线程也就退出了}}}
}

![线程 2.1.2](D:\桌面\博客\picture\线程 2.1.2.png)

  1. 当进程开始,main线程执行,start() 使得子线程 Thread-0 开始。
  2. 在主线程和子线程交替进行(在60次内)
  3. 60次后,主线程结束消失,子线程Thread-0继续执行剩下20次
  4. Thread-0结束后,线程也就结束了,界面失去响应

实现Runnable接口

说明:

  1. java是单继承的,在某些情况下一个类可能已经继承了某个父类,这时在用继承
    Thread类方法来创建线程显然不可能了。
  2. java设计者们提供了另外一个方式创建线程,就是通过实现Runnable接口来创建线程

案例:

请编写程序,该程序可以每隔1秒。在控制台输出“hi!",当输出10次后,自动退出。请使用实现Runnable接口的方式实现。这里底层使用了设计模式【代理模式】

public class Thread02{public static void main(String[] args){Dog dog = new Dog();//dog.start(),这里不能调用start//创建了Thread对象,把dog对象(实现Runnable),放入ThreadThread thread = new Thread(dog);thread.start();}
}
class Dog implements Runnable{//通过实现Runnable接口,开发线程int count = 0;@Overridepublic void run(){while(true){System.out.println("小狗汪汪叫...hi" + (++count) + Thread.currentThread().getName());//休眠一秒try{Thread.sleep(1000);} catch(InterruptedException e){e.printStackTrace();}if(count == 10){break;}}}
}

代码模拟实现Runnable接口开发线程的机制

public class Thread02{public static void main(String[] args){Tiger tiger = new Tiger();//实现了RunnableThreadProxy threadProxy = new ThreadProxy(tiger);threadProxy.start();//运行结果:"老虎嗷嗷叫"}
}class Animal{}
class Tiger extends Animal implements Runnable{@Overridepublic void run(){System.out.println("老虎嗷嗷叫");}
}//线程代理类,模拟了一个极简的Thread类
class ThreadProxy implements Runnable{//可以把Proxy类当成Threadprivate Runnable target = null;//属性,类型是 Runnable@Overridepublic void run(){if(target != null){target.run();//动态绑定(运行类型Tiger)}}public ThreadProxy(Runnable target){this.target = target;}public void start(){start0();//这个方法是真正实现多线程的方法}public void start0(){run();}
}

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

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

相关文章

昌平建设网站万网域名备案查询

环境&#xff1a; Wiondws XP sp3 工具&#xff1a; ollydbg&#xff0c;ExeInfo PE 查壳&#xff1a; 用Exeinfo PE 查壳&#xff0c;没有壳&#xff0c;是VB写的 过程&#xff1a; 一&#xff1a;随便输入一个serial&#xff0c;得到一个错误信息消息框&#xff0c;OD载入…

中建交通建设集团有限公司网站在线制作电子简历

文章目录类的概念类的定义实例例子分析类的成员数据成员属性成员方法成员静态成员博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 类的概念 在日常生活中&#xff0c;类是对具有相同特性的一类是物的抽象。比如水果是一个类&#xff0c;它是对…

商业网站域名后缀wordpress缓存文件

一直以来运营商被认为只是做服务&#xff0c;而设备等都是由设备商提供的&#xff0c;甚至由于如今的设备高度复杂&#xff0c;设备商已承包越来越多的基站运维工作&#xff0c;运营商的技术水平越来越低&#xff0c;不过随着中国移动发布5G射频芯片8676&#xff0c;似乎显示出…

网站页脚凯里网站建设哪家专业

【有道云笔记】二十 4.8 过滤器Filter https://note.youdao.com/s/dSofip3f 一、为什么要使用过滤器 项目开发中&#xff0c;经常会用到重复代码的实现。 1、请求每个servlet都要设置编码 2、判断用户是否登录&#xff0c;只有登录了才有操作权限。 二、过滤器相关Api int…

乐从建网站秦皇岛黄金海岸浴场

本文转载自&#xff1a;endymecy|ALS 一、什么是ALS ALS是交替最小二乘&#xff08;alternating least squares&#xff09;的简称。在机器学习中&#xff0c;ALS特指使用交替最小二乘求解的一个协同推荐算法。它通过观察到的所有用户给商品的打分&#xff0c;来推断每个用户…

网站如何提高转化率网站上传到虚拟空间

一、网卡相关概念 网卡&#xff1a;网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。 网络模型&#xff1a;OSI网络模型、TCP/IP网络模型 LINUX网络收发流程&#xff1a; 1. 内核分配一个主内存地址段&#xff08;DMA缓冲区)&#xff0c;网卡设备可以在…

经典网站设计案例动画制作软件flash

1、UDP协议 UDP用户数据报协议&#xff0c;是面向无连接的通讯协议&#xff0c;UDP数据包括目的端口号和源端口号信息&#xff0c;由于通讯不需要连接&#xff0c;所以可以实现广播发送。 UDP通讯时不需要接收方确认&#xff0c;属于不可靠的传输&#xff0c;可能会出现丢包现…

各大网站新闻上海网站建设培训班

请求报文格式&#xff1a; 请求行&#xff08;请求方法URI协议版本&#xff09;请求头部空行请求主体 请求行&#xff1a;GET /sample.jsp HTTP/1.1 表示使用 GET 方法请求 /sample.jsp 资源&#xff0c;并使用 HTTP/1.1 协议。请求头部&#xff1a;包含多个字段&#xff0c;…

做网推的网站义乌网络布置

dub 删除heberfil.sys大文件的方法 方法1:Windows/system32中的cmd.exe 输入 powercfg -h off&#xff0c;即可关闭休眠功能&#xff0c;同时 Hiberfil.sys 文件也会自动删除。 方法2:运行命令gpedit.msc打开策略组 依次打开Computer Configuration——Administrative Template…

网站上怎么做图片变换动图关于网站开发书籍

Map和Set接口 1.Set集合&#xff1a;独特性与无序性 Set是Java集合框架中的一种&#xff0c;它代表着一组无序且独特的元素。这意味着Set中的元素不会重复&#xff0c;且没有特定的顺序。Set接口有多个实现类&#xff0c;如HashSet、LinkedHashSet和TreeSet。 2.Map集合&…

恢复某个数据文件不适当,导致DataGuard无法open数据库

1、案例概述 同事反馈:一套11gR2的DataGuard环境,备库执行alter databases open时,一直hang住,数据库的alert日志也没有任何的报错信息。询问得知,由于备库的system数据文件损坏,导致DG环境中断,于是同事从主库…

Nginx 部署及配置

一、前言 Nginx 是现代 Web 架构中不可或缺的组件,广泛用于反向代理、负载均衡、静态资源服务和安全网关。二、基础部署与核心配置 1. 常见安装方式(以 Ubuntu 为例) sudo apt update sudo apt install nginx -y s…

VSCode C/C++ 开发环境配置

VSCode C/C++ 开发环境配置在Windows和Ubuntu下, 使用VSCode开发GCC C/C++的环境配置.VSCode 安装插件C/C++ Extension PackC/C++ C/C++ Themes CMake ToolsMakefile Tools CMakeWindows下的环境配置 安装 MSYS2 和 GC…

做网站买流量网站线框图

前言众所周知&#xff0c; 现在的 Spring 框架已经成为构建企业级 Java 应用事实上的标准了&#xff0c;众多的企业项目都构建在 Spring 项目及其子项目之上&#xff0c;特别是 Java Web 项目。Spring 的两个核心概念是 IoC(控制反转)和 AOP(面向切面编程)。想了解 Spring 的工…

南阳网站排名优化费用wordpress主题 简洁

文章目录 java整合农行支付1:业务需求了解2:第三方App接入农行支付流程2.1 java 集成农行依赖2.2 java配置农行支付相关证书信息2.2.1:首先我们要配置ConfigSource 文件2.2.2: 配置TrustMerchant 文件信息3:接入农行支付等相关api接口java整合农行支付 技术背景:idea+jd…

公司建设网站算入什么会计科目修改wordpress wp-admin

~~ 转载于:https://www.cnblogs.com/agllero/p/4533848.html

网站开发团队如何接活自己做网站可以上传软件

天池竞赛-津南数字制造算法挑战赛【赛场二】解决方案分享 一、前言 竞赛页面 团队名BugFlow&#xff0c;最终排名35/2157 虽然成绩一般&#xff0c;但是作为一支目标检测领域的新手队伍&#xff0c;仅仅有一块1070显卡&#xff0c;从零开始拿到这个排名&#xff0c;也算有一…

自做闪图网站网站建设需要什么材料

本是青灯不归客&#xff0c;却因浊酒恋红尘 一&#xff0c;基本使用 关于Room数据库的基本使用&#xff0c;请参考文章Android--Jetpack--数据库Room详解一-CSDN博客 二&#xff0c;Room与ViewModle,LiveData的结合使用 LiveData与ViewModle的使用&#xff0c;请参考文章Andr…

网站建设的心得与体会茂名市建设局网站

&#x1f4d6;第4章 Android高德地图绘制标记点Marker ✅绘制默认 Marker✅绘制多个Marker✅绘制自定义 Marker✅Marker点击事件✅Marker动画效果✅Marker拖拽事件✅绘制默认 Infowindow&#x1f6a9;隐藏InfoWindow 弹框 ✅绘制自定义 InfoWindow&#x1f6a9;实现 InfoWindow…

婚恋咨询网站运营wordpress 外跳

2019独角兽企业重金招聘Python工程师标准>>> 用java实现对纯真IP数据库的查询&#xff0c;首先到网上下载QQwry.da文件&#xff0c;读取代码如下&#xff1a;1.IP记录实体类 package com.guess.tools; /** * 一条IP范围记录&#xff0c;不仅包括国家和区域&#xff…