多线程与高并发——基本概念

多线程与高并发——基本概念

1. 何为进程?何为线程?
  • 进程是程序的一次执行过程,是系统运行程序的基本单位,是动态的。

  • 线程是一个比进程更小的执行单位(也叫轻量级进程)。一个进程在其执行的过程中可以产生多个线程。 之后可以扯JVM相关的内容,例如多个线程共享进程的方法区资源,但每个线程有自己的程序计数器虚拟机栈本地方法栈

2. 并发与并行的概念
  • 并发: 同一时间段,多个任务都在执行 (单位时间内不一定同时执行,即交替执行);

  • 并行: 单位时间内,多个任务同时执行。

3. 创建线程的方式(Java)
  • 继承Thread类
  • 实现Runnable接口
  • Callable和Future创建线程
  • 线程池
4. 上下文切换

在这里插入图片描述

问多线程不一定很快的原因,可以回答这一点

如何减少上下文切换:1. 无锁并发编程 2. CAS算法 3. 使用最少线程 4. 协程

5.sleep(),join(),yield()
  • sleep():即将当前线程休眠一段时间,并不会释放锁,但是会释放CPU资源(这是与wait的区别,sleep不会释放锁,当睡眠的时间到了之后,线程会自动进入可执行状态,等待cpu执行。而wait会释放锁,而且此时必须有另外线程执行notify或者notifyAll,才会唤醒执行了wait方法的线程,该线程才能等待cpu执行)

注意,sleep(),yield(),都是Thread的静态方法,用一个线程的实例去调用是没有意义的,因为这样是让执行该方法的线程进行睡眠或礼让。(join使用final修饰的)

  • yield():让出CPU资源,重新进行调度,之后还是执行yield()的线程也是有可能的,因为这是由CPU进行调度的,即我礼让一下,然后大家(包括我)再一起抢

  • join():意思就是在自己当前线程加入你调用Join的线程(),本线程等待。等调用的线程运行

    完了,自己再去执行。t1和t2两个线程,在t1的某个点上调用了t2.join,它会跑到t2去运行,t1等待t2运

    行完毕继续t1运行(自己join自己没有意义)

6. 线程的六种状态以及转化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

——————————————————————————————————————————————————————

后面的不用掌握,瞄一眼有个印象即可

7. 避免死锁的几个常见方法
  • 避免一个线程同时获取多个锁
  • 避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源
  • 尝试使用定时锁,使用lock.tryLock(timeout) 来替代使用内部锁机制
  • 对于数据库锁,加锁和解锁必须在一个数据库连接里面,否则会出现解锁失败的情况
8. 如何解决资源限制的问题
  • 对于硬件资源限制,使用集群并发执行程序
  • 对于软件资源限制,使用资源池将资源复用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值