底层实现:
(1)内核线程:Java就是基于内核线程中的轻量级进程实现
系统内核管理线程(KLT),内核保存线程的状态和上下文信息,线程阻塞不会引起进程阻塞。在多处理器系统上,多线程在多处理器上并行运行。线程的创建、调度和管理由内核完成,效率比ULT要慢,比进程操作快。也就是操作系统管理。
(2)用户线程
用户程序实现,不依赖操作系统核心,应用提供创建、同步、调度和管理线程的函数来控制用户线程。不需要用户态/内核态切换,速度快。内核对ULT无感知,线程阻塞则进程(包括它的所有线程)阻塞。也就是说用户程序管理
(3)混合型:综合内核线程+用户线程。
1.程序和进程的区别?
程序:表现为系统中的一个可执行文件(静态的)
进程:程序(静态的可执行文件)运行起来之后,就是一个进程(运行态的程序)
说明:操作系统把程序代码加载到内存,调用CPU执行程序的代码。系统再把进程管理起来,进程时作为系统分配资源的最小单位(CPU,内存等等),一个进程,系统时分配有唯一的一个id标识。
2.并发和并行
并发:在系统调度一个cpu,采用时间轮转调度的方式,在一个时间范围内,执行多个进程的代码。对于人肉眼来说,这个时间时不可感知的,就认为时在同时进行。
并行:多个cpu,在用一个时间点,同时执行多个进程的代码(真同时)。
3.线程和进程的区别?
(1)进程时系统进行资源分配的最小单位,线程是cpu调度的最小单位
(2)进程有自己的内存空间地址,线程只独享指令流执行的必要资源,比如寄存器和栈。
(3)由于同一进程的各线程间共享内存和文件资源,可以不通过内核进行直接通信
(4)线程的创建、切换及终止效率高。
4.内核态和用户态
(1)操作系统 权限最高,如果一个程序执行某个指令,没有权限,就需要调用系统接口来执行,此时,用户进程就进入“内核态”或“核心态”。
(2)用户进程来说,权限是最低的,成为“用户态”。
5.进程的状态

| void | start() | 启动线程 当前线程创建态转变为就绪态(java中也可以说可运行态) |
| static Thread | currentThread() | 返回对当前正在执行的线程对象的引用 |
| static void | yield() | 线程让步:当前线程由运行态转变为就绪态 |
| static void | sleep(long miuis) | 线程休眠:让当前线程休眠指定时间以后再继续执行 |
| void | interrupt() | 中断这个线程 某个线程的引用.interrupt |
| boolean | interrupted() | 中断线程,返回中断标志位;重置标志位 |
| boolean | isInterrupted() | 返回中断标志位 |
| void | join() | 等待这个线程死亡 |
| void | join(long millis) | 等待这个线程死亡最大mills毫秒 |
创建线程:
创建线程的方式有哪些?(如何定义线程要执行的任务代码?)
只有一种: new Thread
①继承 Thread,重写run
②实现Runnable,重写run
③实现Callable接口,重写call()
启动线程 start vs run:
①.start() start会真正启动一个线程,和调用start方法所在的线程,是并发并行执行。
② run()run方法只是一个线程的任务定义,如果直接调用run方法,属于普通方法调用。
线程等待 wait()vs sleep():
wait是要先加锁,再使用;让当前线程等待,并释放对象锁;用于线程通信
7.线程状态和状态转移的意义

线程的状态 :
① New创建态 ② Runnable可运行态 ③ Waiting等待 ④ Timed_Waiting超时等待 ⑤ Blocked阻塞 ⑥ Terminated终止
8.java进程是如何运行的?java进程的内存和线程的影响
java类名--->运行一个java进程(系统分配java进程空间),加载class字节码到java进程的内存,java程序(java虚拟机)执行字节码指令(一行一行的翻译为机器码,cpu执行机器码)会启动main线程执行main主函数。
内存(栈 、堆、方法区)
栈(线程私有):包含局部变量表(局部变量+基础数据类型的值)。
堆(线程共享):对象和数组(虽然是共享,但是线程不共用,取决于线程是否能获取对象的引用)。
方法区(线程共享):方法区与java堆一样,是各个线程共享的内存区域。它用于存储已被虚拟机加载的类信息,常量、静态变量,即时编译器编译后的代码等数据。
本文详细介绍了Java中的线程和进程,包括内核线程与用户线程的区别、并发与并行的概念、线程的状态转换以及Java线程API的使用。此外,还阐述了程序与进程的差异、线程与进程的特性以及内存管理在Java进程中的作用。
3万+

被折叠的 条评论
为什么被折叠?



