JavaEE 多线程01

简介: JavaEE 多线程01

为什么引入多线程?

首先进程已经能很好的完成多任务这个情景下的并发编程了,那为什么又引入多线程呢?

这是因为在一些情景下,我么需要大量的创建和销毁进程来完成一些任务,此时多进程对系统的开销就会很大了.

假设有这样一个场景,服务器同时接收到很多个服务请求,这个时候服务器就会创建多个进程来处理这些请求,处理完成之后就要摧毁这个请求,这个时候就需要大量的创建和销毁对应的进程了,这样对服务器的cpu,硬盘,内存,带宽都会造成很多的占用.这个时候多进程表现的就不尽人意了.

这个时候我们就引入了多线程,你可以理解线程为一种轻量级的进程,线程在能完成以上情景之外,减小了创建的开销,保持了独立调度的特性,这样在支持并发的同时,减去了创建和销毁的开销!

注:线程是系统调度的基本单位,进程是系统分配资源的基本单位.

那么,线程是怎么做到这一点的呢?

线程的创建开销

线程和进程的描述一样是使用一个pcb来描述的,一个进程其实有多个pcb,这就是一个线程组,这里的线程在内存指针和文件操作符表等上是共用一个空间的,只有在其他的pid等是不同的,由于文件指针相同,所以只有在第一个线程的创建的时候是需要内存开销的,其他的时候都开销非常小,你可以理解为只有创建第一个线程的时候从系统分配资源,后续都直接使用之前分配好的资源即可.也不是随便两个线程都是"共享空间的",只有线程组内的线程才共享一个空间,而这个线程组可以理解为是进程的一部分.

进程和线程的区别

这是一个经典的问题,我们来讨论一下

1.每个进程有自己的资源,进程之间相互不影响,而线程之间有一些资源是共享的,比如文件描述符表和内存指针等.进程是cpu分配资源的基本单位,线程是cpu调度的基本单位.

2.进程之间相互独立运行,线程之间可能相互影响,可能一个线的崩溃导致一系列线程的异常终止

3.同一个进程中的线程可能相互干扰导致线程安全问题.

4.线程不是越多越好的,当线程超过十个之后对性能的提升就不明显了,调度开销可能就会越发明显

相关文章
|
22小时前
|
Java
【JavaEE】——多线程常用类
Callable的call方法,FutureTask类,ReentrantLock可重入锁和对比,Semaphore信号量(PV操作)CountDownLatch锁存器,
|
22小时前
|
Java 关系型数据库 MySQL
【JavaEE“多线程进阶”】——各种“锁”大总结
乐/悲观锁,轻/重量级锁,自旋锁,挂起等待锁,普通互斥锁,读写锁,公不公平锁,可不可重入锁,synchronized加锁三阶段过程,锁消除,锁粗化
|
22小时前
|
Java Go 调度
【JavaEE】——线程池大总结
线程数量问题解决方式,代码实现线程池,ThreadPoolExecutor(核心构造方法),参数的解释(面试:拒绝策略),Executors,工厂模式,工厂类
|
22小时前
|
缓存 安全 Java
【JavaEE】——单例模式引起的多线程安全问题:“饿汉/懒汉”模式,及解决思路和方法(面试高频)
单例模式下,“饿汉模式”,“懒汉模式”,单例模式下引起的线程安全问题,解锁思路和解决方法
|
22小时前
|
Java 调度
|
22小时前
|
Java 调度
【JavaEE】——线程的安全问题和解决方式
【JavaEE】——线程的安全问题和解决方式。为什么多线程运行会有安全问题,解决线程安全问题的思路,synchronized关键字的运用,加锁机制,“锁竞争”,几个变式
|
22小时前
|
Java API 调度
【JavaEE】——多线程(join阻塞,计算,引用,状态)
【JavaEE】——多线程,join,sleep引起的线程阻塞,多线程提升计算效率,如何获取线程的引用和状态
|
22小时前
|
Java 程序员 调度
【JavaEE】线程创建和终止,Thread类方法,变量捕获(7000字长文)
创建线程的五种方式,Thread常见方法(守护进程.setDaemon() ,isAlive),start和run方法的区别,如何提前终止一个线程,标志位,isinterrupted,变量捕获
|
22小时前
|
安全 Java API
【JavaEE】多线程编程引入——认识Thread类
Thread类,Thread中的run方法,在编程中怎么调度多线程
|
22小时前
|
安全 前端开发 Java
【JavaEE】——线程的诞生(超详细、易理解)
进程对内存的管理,进程间的通信,进程的缺点,线程的概念和特点,进程和线程在内存中的分配方式,进程和线程的结合,进程和线程之间的关系,线程的缺点,有无线程的对比,线程的总结