死锁是什么
所谓死锁: 是指两个或两个以上的进程在执行过程当中,因为竞争资源或者因为彼此通讯而形成的一种阻塞的现象,若无外力做用,它们都将没法推动下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。html
android中使用static有什么用
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的全部实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。所以,static对象能够在它的任何对象建立以前访问,无需引用任何对象.
用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块.java
深刻理解Java中为何内部类能够访问外部类的成员
内部类就是定义在一个类内部的类。定义在类内部的类有两种状况:一种是被static关键字修饰的, 叫作静态内部类, 另外一种是不被static关键字修饰的, 就是普通内部类。android
- 内部类对象的建立依赖于外部类对象;
- 内部类对象持有指向外部类对象的引用。
深度缘由:web
- 编译器自动为内部类添加一个成员变量, 这个成员变量的类型和外部类的类型相同, 这个成员变量就是指向外部类对象的引用;
- 编译器自动为内部类的构造方法添加一个参数, 参数的类型是外部类的类型, 在构造方法内部使用这个参数为1中添加的成员变量赋值;
- 在调用内部类的构造函数初始化内部类对象时, 会默认传入外部类的引用。
进程与线程的区别
线程是指进程内的一个执行单元,也是进程内的可调度实体.设计模式
与进程的区别:
(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有本身独立的地址空间;
(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是.
4)两者都可并发执行.数组
进程和线程都是由操做系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:多线程
简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程当中拥有独立的内存单元,而多个线程共享内存,从而极大地提升了程序的运行效率。
线程在执行过程当中与进程仍是有区别的。每一个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。可是线程不可以独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分能够同时执行。但操做系统并无将多个线程看作多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。并发
进程是具备必定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),可是它可与同属一个进程的其余的线程共享进程所拥有的所有资源.
一个线程能够建立和撤销另外一个线程;同一个进程中的多个线程之间能够并发执行.异步
hashmap和hasptable的区别
第一,继承不一样。函数
public class Hashtable extends Dictionary implements Map
public class HashMap extends AbstractMap implements Map
第二
Hashtable 中的方法是同步的,而HashMap中的方法在缺省状况下是非同步的。在多线程并发的环境下,能够直接使用Hashtable,可是要使用HashMap的话就要本身增长同步处理了。
第三
Hashtable中,key和value都不容许出现null值。
在HashMap中,null能够做为键,这样的键只有一个;能够有一个或多个键所对应的值为null。当get()方法返回null值时,便可以表示 HashMap中没有该键,也能够表示该键所对应的值为null。所以,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。
第四,两个遍历方式的内部实现上不一样。
Hashtable、HashMap都使用了 Iterator。而因为历史缘由,Hashtable还使用了Enumeration的方式 。
第五
哈希值的使用不一样,HashTable直接使用对象的hashCode。而HashMap从新计算hash值。
第六
Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增长的方式是 old*2+1。HashMap中hash数组的默认大小是16,并且必定是2的指数。
参考:
HashMap和Hashtable的区别
android进程间通讯哪几个方法
Android进程间通讯
Android 之 Binder与进程间通讯
深刻分析AIDL原理
Android IPC的6种方式
Android IPC进程通讯——Messager方式
android异步加载哪几个方法
AsyncTask、HandlerThread、Activity.runOnUIThread(Runnable)
Android图片异步加载的方法
详解Android中AsyncTask的使用
Android基本功:异步任务(AsyncTask)
android同步机制,synchronized
java同步机制:synchronized
Java synchronized详解
为何使用设计模式
为何咱们须要学习(设计)模式
知乎设计模式讨论
如何正确的使用设计模式
静态方法中可使用非静态的变量么
static 关键字
若是想对象中的属性能被全部对象共享,则就必须将其声明为static属性,若是一个类中的方法想由类调用,则能够声明为static方法
使用static声明的属性成为全局属性(也称为静态属性、类属性)
Java中经常使用的内存区域
- 栈内存空间:保存全部的对象名称(更准确的说是保持了引用了堆内存空间的地址)
- 堆内存空间:保存每一个对象的具体属性内容
- 全局数据区:保存static类型的属性
- 全局代码区:保存全部的方法定义
使用static声明的方法称为类方法
非static声明的方法能够去调用static声明的属性或方法,可是static声明的方法是不能调用非static类型声明的属性或方法。static是不能调用任何非static内容的,由于在程序中全部的属性和方法必须在对象开辟堆内存以后才能够调用,而static类型的方法在对象未被实例化时就能够被类名调用。