JUC并发:

JUC并发:

进程:进程相当于程序的是实例化,是负责资源管理的,在java中进程作为资源分配,管理的最小单位;

线程:一个线程就是一个指令流,负责将指令按一定顺序交付给CPU,在java中,线程作为一个最小的调度单位【CPU根据线程找指令】;

在windows中,进程是不活动的,只是作为线程的容器【线程相当于进程的子集】;

进程通信【基本相互独立】:

  • 同一台计算机的进程通信称之为 IPC;
  • 不同计算机的进程通信:HTTP;

线程在进程中,它们共享进程内的内存,资源;

线程内的指令执行完了,线程也就结束了;

任务调度器【将cpu时间片分给不同的线程使用】:多线程并发【concurrent】;

并行【parallel】;

同步:需要等待结果返回,才能继续顺序执行,【阻塞】;

异步:不需要等结果返回,多线程是异步调用;

Thread【线程】 和 Runnable【任务】:

  • 组合关系优于继承关系;
  • FutureTask是进一步具有返回值,和异常的Runnable;

查看进程和线程方法:

# windows
tasklist #查看进程
taskkill #杀死进程
#linux
ps -fe #查看所有进程
ps -fe | grep java
kill #杀死进程

线程运行原理:

  • jvm由堆,栈,方法区【类的字节码】组成,其中的栈内存就是线程使用,每一个线程启动,虚拟机都会为其分配一个栈内存;
    • 每个栈由多个栈帧组成,对应每次方法调用时,所占用的内存;
    • 每个线程只有一个活动栈帧,对应当前正执行的那个方法;
    • 每个线程具有一个程序技术器,存放下一次要运行的代码,交给cpu;
    • 每一个线程【相互独立】的组成:
      • 程序计数器;
      • 方法的栈帧【相互独立】的创建:
        • 局部变量表,方法返回地址【退出地址】,锁记录,操作数栈;
    • 线程上下文切换:
      • 被动的上下问切换:
        • 线程时间片用完;
        • 有更高优先级线程需要运行【eg 垃圾回收器】;
      • 主动的线程切换:
        • 线程调用了:sleep, yield, join, pack, sychronized, lock等函数;
      • 由程序计数器记录下一次将要运行的指令,并且保存每个栈帧的信息【线程太多,影响性能】;
posted @ 2025-03-19 21:01  烟雨断桥  阅读(8)  评论(0)    收藏  举报