1、什么是线程?
进程是代码在数据集合上的一次运行活动,是操作系统进行资源分配和调度的基本单位,也就是说一个应用程序就是一个进程,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。同理的多线程存在于一个应用程序中,让一个应用程序中可以有多个执行部分同时运行,但是操作系统不会把多个线程认为是多个应用,它只会对进程进行资源分配和调度。而线程的调度是由进程完成的。也就是操作系统可以同时运行多个任务,每个任务就是进程。而进程也可以同时运行多个任务,每个任务就是线程。注:但是CPU资源就不是分配给进程了,它是分配给线程的,所以线程是CPU分配的基本单位。
2、线程资源的共享问题?
多个线程是共享进程的堆和方法区资源。
每个线程拥有自己的程序计数器和栈区域。
3、为何线程计数器以及栈区域是私有的?
程序计数器其实是一块内存区域,它是用来记录当前线程执行的指令地址。因为线程是占用CPU的基本单位,一般当前线程占用CPU的时间片到的话就会让出CPU,而此时程序计数器就会记录当前线程让出CPU的执行地址,等再次获得CPU资源的时候就可以从自己私有的程序计数器记录的执行地址继续执行。每个线程都拥有自己的栈资源,存储该线程的局部变量,别的线程访问不到的。
4、堆以及方法区?
堆是进程中最大的一块内存,堆是被进程中的所有线程共享的,是创建线程的时候分配的,主要存储new操作创建的对象实例。
方法区主要存储JVM加载的类、常量以及静态变量等信息。
5、应用实例:
一个WEB服务器必须同时能够响应多个用户请求(并发)
一个浏览器可以同时下载多个图片