进程
进程一般是指正在执行的程序的一个实例,也就是在电脑上将一个软件(应用程序)执行的话,他就是一个进程。
线程
线程一般是指执行代码的最小单元,一个软件(应用程序)包含一个或者多个线程,并且这些线程共享同一进程的内存空间。
线程比进程的优点
创建线程比创建进程快
销毁线程比销毁进程更快
调度线程比调度进程更快
线程又叫做轻量化进程。
注
创建进程时的消耗的资源包括内存,cpu时间,线程调度的开销,同步开销(多个线程访问共享资源时,会进行同步控制),线程创建和销毁时,上下文切换的开销(一个线程切换到另一个线程,尤其在高并发的场景)
创建线程时消耗的资源包括内存资源,cpu资源,上下文开销,系统调度资源,线程创建和销毁
进程和线程的区别和区别
进程是系统分配资源的最小单位,线程是系统调度的最小单位。
进程包含线程,一个进程里面可以有一个线程,也可以有多个线程(进程是包含线程的.每个进程至少有一个线程存在,即主线程)
进程线程都能解决并发编程问题场景.但是进程在频繁创建和销毁中,开销更高.线程开销更低.(线程比进程更轻量,并且创建和销毁一般都是内存和文件的反复)
进程是系统分配资源(内存,文件资源...)基本单位.线程是系统调度执行的基本单位(CPU)
进程之间是相互独立的,各自有各自的虚投地址空间.同一个进程内部的多个线程之间,共用同一个内存空间以及文件资源.一个进程出现bug,其他进程一般都没事.但是一个线程出现bug,很可能把他所在的这个进程带走
第一个多线程代码
我们创建多线程一般来说先创建一个Thread类然后创建这个类的实例化对象,最后使用sart方法启动线程。这是第一种方法继承Thread类
第二种方法实现Runnable接口
这两种方法第一种继承Thread类直接使用继承另外一个类,而另外一种方法是直接实现Runnable接口,第一种适合简单的线程创建因为其不能在和其他线程互通资源以方便共享同一进程中的资源(因为第一种是继承java不能有多继承),第二种由于是实现通过接口实现所以可以和其他的线程之间共享同意进程种的资源。
一个进程中的共享资源可能有数据结构(可能需要并发的读取修改或者添加数据),文件和IO资源,共享的对象,计数器和标志,数据库和内存资源。
匿名内部类创建Thread对象
匿名内部类创建Runnable对象
lambda表达式创建Runnable子类对象