面试复习-线程-callable-设计模式-sleep、wait、线程-进程

47 篇文章 0 订阅
15 篇文章 0 订阅

1.什么是进程、什么是线程

A:线程和进程
要想说线程,首先必须得聊聊进程,因为线程是依赖于进程存在的。
B:进程概述
什么是进程呢?通过任务管理器我们就可以看到进程的存在。
概念:进程就是正在运行的程序,是系统进行资源分配和调用的独立单位。
每一个进程都有它自己的内存空间和系统资源。
C:多进程的意义
单进程计算机只能做一件事情。而我们现在的计算机都可以一边玩游戏(游戏进程),一边听音乐(音乐进程),
所以我们常见的操作系统都是多进程操作系统。比如:Windows,Mac和Linux等,能在同一个时间段内执行多个任务。
对于单核计算机来讲,游戏进程和音乐进程是同时运行的吗?不是。
因为CPU在某个时间点上只能做一件事情,计算机是在游戏进程和音乐进程间做着频繁切换,且切换速度很快,
所以,我们感觉游戏和音乐在同时进行,其实并不是同时执行的。多进程的作用不是提高执行速度,而是提高CPU的使用率。


多线程运行原理

A:Java程序运行原理
Java命令会启动java虚拟机,启动JVM,等于启动了一个应用程序,也就是启动了一个进程。
该进程会自动启动一个 “主线程” ,然后主线程去调用某个类的 main 方法。
所以 main方法运行在主线程中。
B:JVM的启动是多线程的吗:    JVM启动至少启动了垃圾回收线程和主线程,所以是多线程的。

对于锁的理解

public interface Lock
 Lock实现提供更广泛的锁定操作可以比使用 synchronized获得方法和报表。他们允许更灵活的结构,可以有完全不同的特性,可以支持多个相关的 Condition对象。 
锁是一种通过多个线程控制对共享资源的访问的工具。通常,一个锁提供对共享资源的独占访问:在一个时间只有一个线程可以获得锁和所有访问共享资源,需要先获得锁。然而,有些锁可以允许并发访问共享资源,如一个ReadWriteLock读锁。
 对synchronized方法或报表提供了访问每个对象相关的隐式监视器锁的使用,但部队的所有锁的获取和释放在一个结构化的方式发生:当多个锁的获得必须以相反的顺序释放,和所有的锁必须释放相同的词法范围,他们获得。

2.整个线程的生命周期

--线程的运行图

线程使用lock创建的时候可以参考下面文章中的Code内容部分:内容请点击



使用上面的方式进行对线程的实现的操作


--wait和sleep的区别

它们的区别主要考虑两点:1.cpu是否继续执行、2.锁是否释放掉。
对于这两点,首先解释下cpu是否继续执行的含义:cpu为每个线程划分时间片去执行,每个时间片时间都很短,cpu不停地切换不同的线程,以看似他们好像同时执行的效果。
其次解释下锁是否释放的含义:锁如果被占用,那么这个执行代码片段是同步执行的,如果锁释放掉,就允许其它的线程继续执行此代码块了。

明白了以上两点的含义,开始分析sleep和wait:
sleep一段时间之后,往往线程会立即执行,可见cpu一直在为此线程分配时间片,如果外层包有Synchronize,那么此锁并没有释放掉。因此sleep cpu继续执行、锁并没有释放掉;

wait,一般用于锁机制中,肯定是要释放掉锁的,因为notify并不会立即调起此线程,因此cpu是不会为其分配时间片的,也就是说wait 线程进入等待池,cpu不分时间片给它,锁释放掉。


观察者设计模式




包装者设计模式



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Diligently_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值