Java基础进阶多线程概述

简介: Java基础进阶多线程概述

多线程


1、什么是进程?什么是线程?


进程是一个应用程序(1个进程是一个软件)。

线程是一个进程中的执行场景/执行单元。一个进程可以启动多个线程。


2、对于java程序来说,当在DOS命令窗口中输入:


java HelloWorld 回车之后。

会先启动JVM,而JVM就是一个进程。

JVM再启动一个主线程调用main方法。

同时再启动一个垃圾回收线程负责看护,回收垃圾。

最起码,现在的java程序中至少有两个线程并发,

一个是垃圾回收线程,一个是执行main方法的主线程。


3、进程和线程是什么关系?举个例子


阿里巴巴:进程


马云:阿里巴巴的一个线程

童文红:阿里巴巴的一个线程

京东:进程


强东:京东的一个线程

妹妹:京东的一个线程

进程可以看做是现实生活当中的公司。

线程可以看做是公司当中的某个员工。


注意:


进程A和进程B的内存独立不共享。(阿里巴巴和京东资源不会共享的!)


魔兽游戏是一个进程

酷狗音乐是一个进程

这两个进程是独立的,不共享资源。

线程A和线程B呢?

在java语言中:


线程A和线程B,堆内存和方法区内存共享。

但是栈内存独立,一个线程一个栈。

假设启动10个线程,会有10个栈空间,每个栈和每个栈之间,

互不干扰,各自执行各自的,这就是多线程并发。


火车站,可以看做是一个进程。

火车站中的每一个售票窗口可以看做是一个线程。

我在窗口1购票,你可以在窗口2购票,你不需要等我,我也不需要等你。

所以多线程并发可以提高效率。


java中之所以有多线程机制,目的就是为了提高程序的处理效率。


4、思考问题:


使用了多线程机制之后,main方法结束,是不是有可能程序也不会结束。

main方法结束只是主线程结束了,主栈空了,其它的栈(线程)可能还在

压栈弹栈。


5、分析问题:对于单核的CPU来说,真的可以做到真正的多线程并发吗?


对于多核的CPU电脑来说,真正的多线程并发是没问题的。

4核CPU表示同一个时间点上,可以真正的有4个进程并发执行。

什么是真正的多线程并发?


t1线程执行t1的。

t2线程执行t2的。

t1不会影响t2,t2也不会影响t1。这叫做真正的多线程并发。

单核的CPU表示只有一个大脑:

不能够做到真正的多线程并发,但是可以做到给人一种“多线程并发”的感觉。

对于单核的CPU来说,在某一个时间点上实际上只能处理一件事情,但是由于

CPU的处理速度极快,多个线程之间频繁切换执行,跟人来的感觉是:多个事情

同时在做!!!!!

线程A:播放音乐

线程B:运行魔兽游戏

线程A和线程B频繁切换执行,人类会感觉音乐一直在播放,游戏一直在运行,

给我们的感觉是同时并发的。


电影院采用胶卷播放电影,一个胶卷一个胶卷播放速度达到一定程度之后,

人类的眼睛产生了错觉,感觉是动画的。这说明人类的反应速度很慢,就像

一根钢针扎到手上,到最终感觉到疼,这个过程是需要“很长的”时间的,在

这个期间计算机可以进行亿万次的循环。所以计算机的执行速度很快。


目录
打赏
0
0
0
0
4
分享
相关文章
|
1月前
|
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
162 60
【Java并发】【线程池】带你从0-1入门线程池
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
67 23
MySQL底层概述—3.InnoDB线程模型
InnoDB存储引擎采用多线程模型,包含多个后台线程以处理不同任务。主要线程包括:IO Thread负责读写数据页和日志;Purge Thread回收已提交事务的undo日志;Page Cleaner Thread刷新脏页并清理redo日志;Master Thread调度其他线程,定时刷新脏页、回收undo日志、写入redo日志和合并写缓冲。各线程协同工作,确保数据一致性和高效性能。
MySQL底层概述—3.InnoDB线程模型
|
24天前
|
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
当我们创建一个`ThreadPoolExecutor`的时候,你是否会好奇🤔,它到底发生了什么?比如:我传的拒绝策略、线程工厂是啥时候被使用的? 核心线程数是个啥?最大线程数和它又有什么关系?线程池,它是怎么调度,我们传入的线程?...不要着急,小手手点上关注、点赞、收藏。主播马上从源码的角度带你们探索神秘线程池的世界...
94 0
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
136 14
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
61 13
【JAVA】封装多线程原理
Java 中的多线程封装旨在简化使用、提高安全性和增强可维护性。通过抽象和隐藏底层细节,提供简洁接口。常见封装方式包括基于 Runnable 和 Callable 接口的任务封装,以及线程池的封装。Runnable 适用于无返回值任务,Callable 支持有返回值任务。线程池(如 ExecutorService)则用于管理和复用线程,减少性能开销。示例代码展示了如何实现这些封装,使多线程编程更加高效和安全。
课时2:Java简介(Java发展概述)
课时2:Java简介(Java发展概述) 摘要: 1. Java基础知识:介绍Java作为编程语言及其思想。 2. Java的发展历史:从1991年GREEN项目到1995年正式推出,历经网景公司、HotJava浏览器等关键节点。 3. Java的版本信息:涵盖从JDK 1.0到JDK 1.8的主要版本及特性,如Lambda表达式和模块化支持。
Java 多线程 面试题
Java 多线程 相关基础面试题