Java 线程基础
-
进程:
- 启动一个进程,操作系统就会给该进程分配内存空间;
- 进程是要给程序的执行过程,是动态过程,有产生,存在,消亡;
-
线程:
- 线程是由进程创建的,是进程的一个实体;
- 一个进程可以有多个线程;
- 线程也能创建线程;
-
并发:同一个时刻,多个任务交替执行;
-
并行:同一个时刻,多个任务同时执行;
-
线程的两种方式:
- 继承Thread 类,Thread类也实现了Runnable接口,重写run 方法【单继承的局限】;
- 实现Runnable 接口,重写run方法【多实现的优势】;
- 重写run()是子线程的运行代码,调用start()是负责开启线程;
-
线程的执行情况:
- 程序启动,创建一个进程;
- 创建main线程,进入main线程;
- main 线程创建子线程Thread-0,而且不会阻塞main线程,单核就并发,多核就并行;
- 当线程都结束后,进程结束;
线程创建过程:
- 调用start()后,会调用start0();
- start0()是本地方法【native】,使用c / c++实现,由jvm调用;
- 在start0()内会调用run()方法,但是线程并不会立马执行,只是将该线程变成了可运行状态,具体什么时候执行,取决于CPU和资源;
线程常用方法I:
setName(); // 设置线程名;
getName();
start();
run();
setPriority(); //设置线程优先级;
getPriority();//获取线程优先级;
sleep(); //线程休眠;
interrupt();//中断线程,当调用interrupt的时候,子线程会被从sleep中唤醒,并捕获异常,然后通过 try-catch再继续执行子程序;
线程优先级:
- Thread.MAX_PRIORITY:10;
- Thread.NORM_PRIORITY:5【默认值】;
- Thread.MIN_PRIORITY:1;
线程常用方法II
yield(); //线程礼让,让出cpu,让其他线程执行,资源越紧张,越容易成功;
join(); //线程插队,再当前线程下优先执行插队线程,执行完毕后,在执行本线程;
setDaemon(true); // 设置守护线程;
- 守护线程:当所有用户线程结束,守护线程自动结束, eg:垃圾回收机制;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!