加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 运营 > 正文

黑客组织窃取新冠疫苗敏感信息

发布时间:2021-02-01 10:18:50 所属栏目:运营 来源:互联网
导读:阻塞: 当一个线程试图获取对象锁(非JUC库中的锁,即synchronized),而该锁被其他线程持有,则该线程进入阻塞状态。它的特点是使用简单,由JVM调度器来决定唤醒自己,而不需要由另一个线程来显式唤醒自己,不响应中断。 等待: 当一个线程等待另一个线程通知

阻塞:

当一个线程试图获取对象锁(非JUC库中的锁,即synchronized),而该锁被其他线程持有,则该线程进入阻塞状态。它的特点是使用简单,由JVM调度器来决定唤醒自己,而不需要由另一个线程来显式唤醒自己,不响应中断。

等待:

当一个线程等待另一个线程通知调度器一个条件时,该线程进入等待状态。它的特点是需要等待另一个线程显式地唤醒自己,实现灵活,语义更丰富,可响应中断。例如调用:Object.wait()、**Thread.join()**以及等待 Lock 或 Condition。

虽然 synchronized 和 JUC 里的 Lock 都实现锁的功能,但线程进入的状态是不一样的。synchronized 会让线程进入阻塞态,而 JUC 里的 Lock是用park()/unpark() 来实现阻塞/唤醒 的,会让线程进入等待状态。虽然等锁时进入的状态不一样,但被唤醒后又都进入Runnable状态,从行为效果来看又是一样的。

3.5 yield 跟 sleep 区别

  1. yield 跟 sleep 都能暂停当前线程,都不会释放锁资源,sleep 可以指定具体休眠的时间,而 yield 则依赖 CPU 的时间片划分。
  2. sleep方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会。yield方法只会给相同优先级或更高优先级的线程以运行的机会。
  3. 调用 sleep 方法使线程进入等待状态,等待休眠时间达到,而调用我们的 yield方法,线程会进入就绪状态,也就是sleep需要等待设置的时间后才会进行就绪状态,而yield会立即进入就绪状态。
  4. sleep方法声明会抛出 InterruptedException,而 yield 方法没有声明任何异常
  5. yield 不能被中断,而 sleep 则可以接受中断。
  6. sleep方法比yield方法具有更好的移植性(跟操作系统CPU调度相关)

3.6 wait 跟 sleep 区别

1.来源不同

wait 来自Object,sleep 来自 Thread

2.是否释放锁

wait 释放锁,sleep 不释放

3.使用范围

wait 必须在同步代码块中,sleep 可以任意使用

4.捕捉异常

wait 不需要捕获异常,sleep 需捕获异常

3.7 多线程实现方式

  1. 继承 Thread,实现run方法
  2. 实现 Runnable接口中的run方法,然后用Thread包装下。Thread 是线程对象,Runnable 是任务,线程启动的时候一定是对象。
  3. 实现 Callable接口,FutureTask 包装实现接口,Thread 包装 FutureTask。Callable 与Runnable 的区别在于Callable的call方法有返回值,可以抛出异常,Callable有缓存。
  4. 通过线程池调用实现。
  5. 通过Spring的注解 @Async 实现。

3.8 死锁

死锁是指两个或两个以上的线程互相持有对方所需要的资源,由于某些锁的特性,比如syn使用下,一个线程持有一个资源,或者说获得一个锁,在该线程释放这个锁之前,其它线程是获取不到这个锁的,而且会一直死等下去,因此这便造成了死锁。

面试官:你给我解释下死锁是什么,解释好了我就录用你。

应聘者:先发Offer,发了Offer我给你解释什么是死锁。

产生条件:

互斥条件:一个资源,或者说一个锁只能被一个线程所占用,当一个线程首先获取到这个锁之后,在该线程释放这个锁之前,其它线程均是无法获取到这个锁的。

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读