多线程知识点复习04.05

多线程知识点复习

1、线程是什么
简单的说 线程就是一条代码的执行流、完成一组代码的执行。一组代码往往称为一个任务
2、线程的实现方法
一般运用的有三种:继承Thread、实现Runnable接口、实现Callable接口。

但是创建线程应仅有一种方式,即new Thread()。
因为无论时实现Runnable接口还是实现Callable只是对线程的执行代码写了进去,并不是一个线程(此理解,仅供参考)

3、用多线程的目的
充分利用CPU资源,并发做多件事。
4、单核CPU机器适不适合用多线程
适合,如果是单线程,线程在执行过程之间可能会传输网络数据、读取文件这个过程时不会使用到CUP的,线程会出现需要等待IO时,此时CPU就空闲出来了。另外的线程就可以对CPU进行使用
5、线程什么时候会让出CPU

  • 阻塞时:wait、 await、 等待IO时

  • Sleep:线程睡眠中 会让出CPU,但如果抢到锁后不会让出

  • yield:主动让出CPU,但是主动让出其他线程未必强的到,可能还会被自己重新抢到。即给所有线程一次公平的竞争CPU机会

  • 线程结束:线程结束后CPU自动会让出来。

6、CPU做的时什么工作
执行代码:一组程序代码要去执行必须放入CPU上个执行 就需要通过线程去运送到CPU上进行执行。
7、线程是不是越多越好
线程并不是越多越好。

  1. 首先创建线程是需要耗时间,其次使用完需要线程销毁也需要耗时间。线程作为JAVA中的一个对象,每一个java线程都需要一个操作系统线程来支持。如果创建时间+销毁时间>任务执行时间 就很不合算
  2. 创建很多线程需要很多内存。java对象占用堆内存,操作系统占用系统内存(栈内存),根据jvm规范,一个线程默认最大栈大小为1M,这个栈空间是需要从系统内存中分配的。
  3. 操作系统需要频繁的切换线程上下文,影响性能。

8、如何正常的使用多线程

  • 多线程目的:充分利用cpu做事。
  • 线程的本质:将代码送给cpu。
  • 用合适数量的线程不断运送代码。
  • 这个合适数量的线程就构成一个池。
  • 要执行任务就放入池中,池中的一个线程将任务送给cpu执行。
    9、如何确定合适数量的线程
    如果是计算性任务:cpu的1~2倍
    如果是IO型任务:则需要多一些线程,根据具体的IO阻塞时长进行考量决定。如tomcat中默认的最大线程池为:200.也可以考虑需要在一个最小数量和最大数量间自动增减线程数。

线程池原理

在这里插入图片描述
线程池工作原理

  • 接收任务,放入任务仓库
  • 工作线程从仓库取任务,执行
  • 没有任务时线程阻塞,当有任务时唤醒线程执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值