java多线程
什么是多线程
多线程: 多线程是指程序中包含多个执行流,即在-个程序中可以同时运行多个不同的线程来执行不同的任务。
多线程的好处: 可以提高 CPU 的利用率。在多线程程序中,一个线程必须等待的时候,CPU 可以运行其它的线程而不是等待,这样就大大提高了程序的效率。也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
多线程的劣势: 1.线程也是程序,所以线程需要占用内存,线程越多占用内存也越多;2.多线程需要协调和管理,所以需要 CPU 时间跟踪线程;3.线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题。
线程和进程区别
什么是线程和进程?
进程:是程序的一次执行,是具有一定独立功能的程序关于某个数据集合上的一次运动活动,是操作系统资源分配和调度的最小单位。
线程:是操作系统能够进行运算调度的最小单位,它包含在进程之中,是进程中实际运作单位。
两者关系: 进程是指程序执行时的一个实例,线程是进程的一个实体;线程必定也只属于一个进程,而进程可以拥有多个线程而且至少拥有一个线程;多个线程可共享数据。
线程和进程的区别
进程:
- 拥有独立的堆栈空间和数据段,系统开销大
- 由于进程之间是独立的特点 使得进程的安全性比较高 有独立的地址空间 一个进程崩溃 不影响其他进程
- 进程的通信机制相对复杂 譬如管道、信号、消息队列、套接字等
线程:
- 线程拥有独立的堆栈空间 但是共享数据段,它们彼此之间使用相同的地址空间,比进程开销小
- 线程是一个进程中不同的执行路径 一个线程的死亡就等于整个进程的死亡。
- 通信相对方便
线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少包含一个线程。
根本区别: 进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位
资源开销: 每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
包含关系: 如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
内存分配: 同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的
影响关系: 一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
执行过程: 每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行
创建线程的四种方式
-
继承 Thread 类;
public class MyThread extends Thread { @Override public void run() { System.out.println(Thread.currentThread().getName() + " run()方法正在执行..."); }
-
实现 Runnable 接口;
public class MyRunnable implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName() + " run()方法执行中..."); }
-
实现 Callable 接口;
public class MyCallable implements Callable<Integer> { @Override public Integer call() { System.out.println(Thread.currentThread().getName() + " call()方法执行中..."); return 1; }
-
使用匿名内部类方式。
public class CreateRunnable { public static void main(String[] args) { //创建多线程创建开始 Thread thread = new Thread(new Runnable() { public void run() { for (int i = 0; i < 10; i++) { System.out.println("i:" + i); } } }); thread.start(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了