摘要:线程是进程的一个执行单元,是进程内科调度实体,比进程更小的独立运行的基本单位。资源拥有同一进程内的线程共享本进程的资源,但是进程之间的资源是独立的。所以涉及到频繁的切换时,使用线程要好于进程。线程是处理器调度的基本单位,但是进程不是。
什么是进程,什么是线程?
进程:进程是程序的一次执行,是系统进行资源分配和调度的独立单位。每一个进程都有它自己的内存空间和系统资源。
线程:是进程的一个执行单元,是进程内科调度实体,比进程更小的独立运行的基本单位。一个进程在其执行的过程中可以产生多个线程,与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,因此线程也被称为轻量级进程。
一个程序至少一个进程,一个进程至少一个线程。
地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
资源拥有:同一进程内的线程共享本进程的资源,但是进程之间的资源是独立的。
一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。
执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
线程是处理器调度的基本单位,但是进程不是。
进程是并行的,线程是并发的
并行与并发并行:
并行性是指同一时刻内发生两个或多个事件,是在不同实体上的多个事件
并发:
并发性是指同一时间间隔内发生两个或多个事件,是在同一实体上的多个事件
Java实现多线程
继承Thread,重写run方法
public class MyThread extends Thread { @Override public void run() { for (int x = 0; x < 200; x++) { System.out.println(x); } } }
public class MyThreadDemo { public static void main(String[] args) { // 创建两个线程对象 MyThread my1 = new MyThread(); MyThread my2 = new MyThread(); my1.start(); my2.start(); } }
实现Runnable接口,重写run方法
public class MyRunnable implements Runnable { @Override public void run() { for (int x = 0; x < 100; x++) { System.out.println(x); } } }
public class MyRunnableDemo { public static void main(String[] args) { // 创建MyRunnable类的对象 MyRunnable my = new MyRunnable(); Thread t1 = new Thread(my); Thread t2 = new Thread(my); t1.start(); t2.start(); } }
一般使用实现Runnable接口
jvm虚拟机的启动是单线程的还是多线程的?是多线程的。不仅仅是启动main线程,还至少会启动垃圾回收线程的
并发基础笔试题这是github上一位大佬整理的,个人觉得很棒
并发基础笔试题
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/75735.html
摘要:协作方式在高并发场景中,必须要让服务器同时维护大量请求连接,可能是一个服务进程创建另一个进程,也可能是一个服务线程去创建另一个线程,但连接结束后进程或线程就销毁了,这是一个巨大的浪费一个自然的想法就是通过创建一个进程线程池从而达到资源复用, showImg(https://segmentfault.com/img/bVbtgn1?w=313&h=208); 协作方式 在高并发场景中,必...
摘要:当某种网络事件发生时,会回调用户设置的指定回调函数。承担了底层网络事件的监听及各种底层事件处理,当收到请求时,会触发事件提醒,然后将控制权转交预先注册的事件回调函数,来进行后续的处理。请求到来时创建,请求结束后销毁。 运行流程图 showImg(https://segmentfault.com/img/remote/1460000017207791);showImg(https://s...
摘要:最近听很多面试的小伙伴说,网上往往是一篇一篇的多线程的文章,除了书籍没有什么学习多线程的一系列文章。将此线程标记为线程或用户线程。 最近听很多面试的小伙伴说,网上往往是一篇一篇的Java多线程的文章,除了书籍没有什么学习多线程的一系列文章。但是仅仅凭借一两篇文章很难对多线程有系统的学习,而且面试的时候多线程这方面的知识往往也是考察的重点,所以考虑之下决定写一系列关于Java多线程的文章...
阅读 1701·2021-11-18 10:02
阅读 2217·2021-11-15 11:38
阅读 2665·2019-08-30 15:52
阅读 2189·2019-08-29 14:04
阅读 3230·2019-08-29 12:29
阅读 2086·2019-08-26 11:44
阅读 993·2019-08-26 10:28
阅读 829·2019-08-23 18:37