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:垃圾回收机制;
posted @   烟雨断桥  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示