内部类
概念:
一个类中定义另外一个类 , 那这个另外的类就是 内部类
分类:
-
在类的成员位置: 成员内部类 (如果内部类被static修饰,则这个内部类称之为静态内部类)
-
在类的局部位置: 局部内部类
-
没有名字的: 匿名内部类
规则:
-
内部类可以直接访问外部类的全部成员
-
外部类访问内部类, 必须要创建对象
-
内部类可以被static修饰
定义成员内部类:
public class 外部类 {
class 内部类 {
}
}
访问: 创建成员内部类对象的语法:
外部类名.内部类名 对象名 = 外部类对象.内部类对象();
访问被private修饰的内部类
在外部类提供一个访问内部类的一个公开的方法, 在这个公开方法中 提供对内部类的一个访问.
定义局部内部类:
在一个类中的方法内 定义的类 就是局部内部类
访问: 局部内部类的访问 必须在类的方法内部 提供 局部内部类的访问机制
局部内部类也是可以访问外部类的成员的.
匿名内部类: 它主要的作用就是对接口实现类的一个简化 我们在定义接口之后 可以通过匿名内部类直接去重写接口的抽象方法,而不需要再去定义一个实现类文件
多线程
线程:
线程是操作系统能够进行运算调度的最小单位, 它包含在进程中, 是进程中的实际运作单元.
进程:
进程是一个具有一定独立功能的程序在电脑的数据集上的一次动态执行过程. 是操作系统进行资源分配和资源调度的一个独立单位. 进程它是应用程序运行的载体
一个进程可以有一个或多个线程
线程该如何实现? (企业级面试题)
-
继承Thread类 (单继承)
-
实现Runnable接口 (与继承无关,多实现)
继承Thread类的开发步骤
-
自定义线程类继承 Thread类
-
重写run()方法, 编写线程要执行的代码
-
创建线程对象, 调用start()方法来创建线程
获取线程名字
Thread.currentThread().getName();
实现Runnable接口的开发步骤
-
自定义类实现Runnable接口
-
重写run()方法 , 编写线程要执行的代码
-
创建线程代理对象, 调用start()方法
Runnable接口的优点
实现Runnable接口的同事, 还可以去继承其他类,实现其他接口, 避免了java的单继承带来的局限性
Runnable接口 可以实现资源共享,Thread无法完成资源共享的
所以在编程中,我们更坚实使用Runnable接口来实现多线程.
静态代理模式
代理模式的简述: 代理对象可以做很多真实对象做不了的事情 真实对象只需要专注做自己的事情
代理模式的开发步骤: 1. 真实对象和代理对象要实现同一个接口 2. 代理对象要代理真实对象
代理可以实现的操作标签:Runnable,内部,静态,代理,接口,对象,线程,多线程 From: https://www.cnblogs.com/y6909/p/16649027.html
单线程, 多线程, 死锁 乐观锁 悲观锁 同步锁