死锁是指什么?
定义
死锁通常是指操作系统中进程的死锁,在多线程程序中也可能发现死锁。
多个进程同时获取系统资源,但是互不相让,造成都在等待,谁也不能继续住下运行,这种状态就称为死锁。
举例理解:
两个人相向而行(两个进程在运行)
正好面对面碰上(两进程均占有资源,并需要对方占有的资源,这里的资源即道路)
互不相让(都不愿意释放占有的资源)
两人都无法继续前进(死锁)
两人相互礼让,但恰好同时站在同一边让路,再次相让,仍是同一边,不断重复,最终还是无法前进(活锁)
四种必要条件
禁止抢占:系统资源不能被其他进程抢过去,只能由当前进程释放。
持有和等待:一个进程可以在等待的时候持有系统资源。
互斥:资源不能同时分配给多个进程。
循环等待:...
进程与线程的区别?
什么是进程?
众所周知,单个 CPU 一次只能运行一个任务,这里的单个任务就是指进程。
执行单个任务时,除了 CPU 外,还必须有构成这个任务的的执行环境,称为程序上下文(Context)。 一个任务的执行其实包含 3 个步骤:CPU 加载上下文、CPU 执行、CPU 保存上下文,这些步骤的耗时总和就是进程。
什么是线程?
线程包含在进程中,是进程中的实际运作单位。
通俗来讲,一个任务(进程)可能会有多个子任务(线程),比如你可以在 IDE 中进行代码编写、代码分析、智能提示等很多工作同时进行。
在多核或多 CPU 上使用多线程能提高程序的执行吞吐率。在单核、单 CPU 的计算机上,使用多线程通常能够把耗时计算与人机交互分开来执行,从来不会让 GUI 程序卡死,提高程序的执...
C++ 中 const 的用法总结
修饰变量
内置类型
// 局部变量
const int a = 0;
// 类的成员变量
class A {
private:
const int a; // 常对象成员只能在初始化列表中赋值
public:
//A() : a(0) {}; // OK
//A(int value) : a(value) {}; // OK
A() {
a = 0; // ERROR
}
};
指针类型
// 指针指向的内容不可变
const int *p = 0;
int p1;
*p = 1; // ERROR
p = &p1; // OK
// 指针不可变
int* const p = 0;
i...
Android 学习笔记 004:View.findViewById()、View Binding、Data Binding
仅作为学习记录,内容有待完善
findViewById
通过 findViewById 方法在 Activity 或者 Fragment 中引用布局中的视图。
Button myButton = (Button) findViewById(R.id.my_button);
这种方式引用布局有以下缺点:
布局中每一个用到的视图都需要通过 findViewById 实例化,代码重复
参数 id 可能写错,或者 id 不存在
类型转换可能写错
参数和类型转换只能在运行时检查出错误
View Binding
通过视图绑定,系统自动为 layout 文件生成绑定类,layout 中指定了 id 的视图都在会绑定类中实例化。
大多数情况下,视图绑定可以取代 f...
Android 学习笔记 003:关于 Context 的理解
仅作为学习记录,内容有待完善
官方文档定义
Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receivin...
Android 学习笔记 002:Activity 的生命周期
四种状态
Activity 整个生命周期可分为以下四种状态:
运行
暂停
停止
不存在
状态切换
Activity 状态切换时系统会进行相应方法的调用。
运行 & 暂停
运行 -> 暂停 onPause()
暂停 -> 运行 onResume()
暂停 & 停止
暂停 -> 停止 onStop()
停止 -> 暂停 onStart()
停止 & 不存在
停止 -> 不存在 onDestroy()
不存在 -> 停止 onCreate()
...
Android 学习笔记 001:Intent 的使用
是什么?
Intent(意图) 是一个在组件之间进行消息传递的对象,不仅可用于应用间传递,还可用于应用内传递。
应用内信息传递主要有 3 种:
启动 Activity
启动服务
传递广播
使用方式
显式使用
一般用于同一应用内。
Intent intent = new Intent(FirstActivity.this, SecondActivity.class); // public Intent(Context packageContext, Class<?> cls)
startActivity(intent);
隐式使用
一般用于不同应用之间。
Intent intent = new Intent("com.example.ac...
共计 31 篇文章,4 页。