java 多线程基础 万字详解(通俗易懂)
目录
一、前言
二、定义
1.进程 :
2.线程 :
3.单线程与多线程 :
4.并发与并行 :
三、线程的创建
1.创建线程的两种基本方式 :
1° 继承Thread类,并重写run方法
1.5° 多线程的执行机制(重要)
2° 实现Runnable接口,并重写run方法
2. 两种创建线程方式的比较 :
四、线程的方法
1. setName(String name) 和 getName() :
2.start() 和 run() :
3.setPriority(int newPriority) 和 getPriority() :
4.sleep(long millis) 和 interrupt() :
5.Δ代码演示 :
五、线程的操作
1.线程退出 :
2. 线程插队 :
3.线程守护 :
六、 线程的状态
1.线程的7种状态:
2.线程的生命周期图:(重要)
七、线程同步机制
1.概述 :
2.使用 :
1° 同步代码块
2° 同步方法
3.案例 :
八、关于“锁”
1.互斥锁
2.死锁 :
3.释放锁 :
九、完结撒❀
一、前言
大家好,本篇博文将会和大家分享关于“多线程”内容的基础部分。“多线程和高并发”作为java学习中一块非常难啃的骨头,本身难度很大,但是依然无法阻止我们向着“牛逼java人”迈进;up将来会在《java高级》专栏与大家分享“多线程和高并发”的相关内容。本篇博文主要面向基础阶段,但是,虽说是基础,该说的我们还是不会含糊。
注意:①代码中的注释也很重要;②不要眼高手低,行之明觉精察处即是知,自己动手跟着过一遍才算有收获;③点击文章前面的目录或者侧边栏目录可以进行跳转。良工不示人以朴,所有文章都会适时改进。感谢阅读!
二、定义
1.进程 :
进程是指程序的一次执行过程,或者说是正在运行的一个程序;当我们启动了某个应用程序时,就启动了一个进程,操作系统就会为该进程分配内存空间。进程是一个动态过程,自身有产生,存在和消亡的过程。
比方说,up现在打开了百度网盘,那么,当前百度网盘就是一个进程,我们可以在任务管理器的“进程”栏中看到它。如下图所示 :
2.线程 :
线程是由进程创建的,是进程的一个实体。一个进程可以拥有多个线程。
比方说,启动百度网盘后,就启动了一个进程,而在百度网盘中我们可以同时启动多个下载任务,这些下载任务就是百度网盘这个进程所创建的线程。如下图所示 :
3.单线程与多线程 :
单线程——同一时刻,只允许执行一个线程。
多线程——同一时刻,可以执行多个线程。eg : 百度网盘可以同时下载多个任务;谷歌浏览器可以同时打开多个页面;qq可以同时打开多个聊天窗口,等等。
4.并发与并行 :
并发——同一时间间隔内,多个任务在宏观上同时执行;单核CPU实现的多任务处理就是并发。实际上,单核CPU在同一时刻只能处理一道程序(一个任务),因此微观上单核CPU的多任务处理是通过“分时交替”来实现的;即,将某一时间间隔分成许多的时间片,然后在不同的时间片不停地切换正在处理的任务,宏观上给人的感觉就是“同时执行”了。
并行——同一时刻可以完成两种或两种以上的任务的处理;并行需要相关硬件的支持,多核CPU可以实现并行。(一般来说,多核CPU的处理是并发和并行同时存在的)。
三、线程的创建
1.创建线程的两种基本方式 :
1° 继承Thread类,并重写run方法
我们先来看一下Thread是什么意思,如下图所示 :
在java中,Thread表示线程,来看一下Thread类的类图,如下 :
可以看到,Thread类其实是实现了Runnable接口,所以才有了两种创建线程的方式。
对于第一种创建线程的方式,up以Thread_Demo1类为测试类,在源文件中定义Grape类去继承Thread类并重写run方法。代码如下 : (注意看注释)
package csdn.knowledge.thread;/*** @author : Cyan_RA9* @version : 21.0*/
public class Thread_Demo1 {public static void main(String[] args) {//创建线程对象Grape grape = new Grape();//启动线程!grape.start();/*通过start方法启动线程,默认会调用线程类中的run方法。*/}
}class Grape extends Thread { /**当某个类继承了Thread类后,就可以当作线程使用*/private int times = 0; //定义times变量,用于统计run方法被执行的次数。/*一般要重写run方法(本质是实现了Runnable接口中的抽象方法),以实现自己的业务需求。*/@Overridepublic void run() {while (true) {System.out.println("我被吃第" + ++times + "次了
java 多线程基础 万字详解(通俗易懂)相关推荐
- java 反射基础 万字详解(Class-Constructor-Method-Field一条龙)
目录 前言 一.反射及其相关概念 1.什么是反射? 2.反射的用途: ①分析类: ②查看并使用对象: 3.反射的应用场景: 4.类加载器: 类的加载时机: 5.Class对象: 联系: 二.获取Cla ...
- JAVA 多线程并发超详解
JAVA 多线程并发超详解(未完,下一篇文章还有) 1. JAVA 多线程并发 1.1.1. JAVA 并发知识库 1.1.2. JAVA 线程实现/创建方式 1.1.2.1. 继承 Thread 类 ...
- java IO流基础 万字详解(从拷贝文件到模拟上传头像)
目录 一.前言: 二.IO流简介: 1.什么是IO流? 2.IO流能干什么? 3.IO流的分类: 4.IO流体系: 三.字符流读写文件: 1.普通字符流读取文件: 前言: ①以单个字符读取: 代码演示 ...
- Java——多线程之方法详解
Java多线程系列文章是Java多线程的详解介绍,对多线程还不熟悉的同学可以先去看一下我的这篇博客Java基础系列3:多线程超详细总结,这篇博客从宏观层面介绍了多线程的整体概况,接下来的几篇文章是对多 ...
- java static关键字 万字详解
目录 一.为什么需要static关键字: 二.static关键字概述 : 1.作用 : 2.使用 : 三.static修饰成员变量详解 : 1.特点 : 2.细节 : ①什么时候考虑使用static关 ...
- java 多线程同步_详解Java多线程编程中的线程同步方法
1.多线程的同步: 1.1.同步机制:在多线程中,可能有多个线程试图访问一个有限的资源,必须预防这种情况的发生.所以引入了同步机制:在线程使用一个资源时为其加锁,这样其他的线程便不能访问那个资源了,直 ...
- Android多线程基础知识详解(傻瓜教程)
线程的基本用法 Android中的多线程和Java中的多线程语法基本相同.定义一个新的线程首先需要新建一个类继承自Thread,然后重写父类方法run(),在run()方法中编写耗时逻辑即可.一般情况 ...
- Java多线程(超详解)
目录 1. 线程简介 1.1 程序 1.2 进程 1.3 线程 1.4 多线程 1.5 普通方法调用和多线程 2. 线程创建 2.1 继承Thread类 2.2 实现Runnable接口 2.3 实现 ...
- Java SE基础知识详解第[18]期—网络编程(通信)
写在前面: 每一个不曾起舞的日子,都是对生命的辜负. 希望看到这里的每一个人都能努力学习,不负韶华,成就更好的自己. 以下仅是个人学习过程中的一些想法与感悟,Java知识博大精深,作为初学者,个人能力 ...
最新文章
- 无法定位软件包_使用Degraph管理软件包依赖关系
- MicroPython支持图形化编辑了:Python Editor带你轻松玩转MicroPython
- 小程序 富文本自适应屏幕_自适应文本:跨屏幕尺寸构建可读文本
- java外部类_Java里什么叫内部类什么叫外部类
- 使用vim的重不重要_VIM高级操作,经常用vim的应该多学习。多开发效率很有大帮助!...
- swift面向对象之属性
- ui li 菜单 点击添加下级_如何制作导航栏中的下拉菜单
- Python3.2官方文档翻译--标准库概览(一)
- TOYOTA MOTOR CORPORATION Programming Contest 2022(AtCoder Beginner Contest 270) AB题解
- python 自动打包pyd
- python数字转中文大写_python 数字转换为大写
- 杭州大江东科目三路线经验分享
- 身为一名合格root管理员的基本防范措施 Linux系统安全及应用
- SoapUI导出响应文件
- 怎样把d盘改成c盘!如何把收藏夹和桌面的路径设成D盘
- 标号法(Dijkstra)求最短路 matlab
- python清华源 断流_V2Ray断流异常
- 课时31:永久储存:腌制一缸美味的泡菜
- outlook答复_如何在Windows版Outlook中设置外出答复
- 猪猪大PK V0.3
热门文章