并发:指两个或多个事件在同一个时间段内发生
并行:指两个或多个事件在同一时刻发生(同时发生)
进程:指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程。
线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个线程中至少有一个线程。
实现Runnable接口创建多线程的好处:
1. 避免了单线程的局限性
一个类只能继承一个类,而接口可以有多个
2 . 增强了程序的扩展性,降低了程序的耦合性(解耦)
把设置线程任务和开启线程任务进行了分离
匿名内部类
格式:
new 父类/接口(){
重写父类/接口中的方法
};
解决线程安全问题
方法一: 同步代码块
格式:
synchronized(锁对象){
可能出现的线程安全问题的代码(访问了共享数据的代码)
}
注意:
1. 通过代码块中的锁对象,可以使用任意的对象
2 . 但是必须保证多个线程使用的锁对象是同一个
3 . 锁对象的作用:
把同步代码锁住,只同时让一个线程在同步代码块中执行
方法二:锁
注意:
在定义成员变量时调用锁接口
在可能出现安全问题的代码前开启锁
在可能出现安全问题的代码后关闭锁
Lambda表达式:是可推导,可以省略
凡是根据上下文推导出来的内容,都可以省略书写
可以省略的内容:
1 . (参数列表):括号中参数列表的数据类型,可以省略不写
2 . (参数列表):括号中的参数如果只有一个,那么类型和()都可以省略
3 . (一些代码):如果{}中的代码只有一行,无论是否有返回值,都可以省略({},return,分号)
注意:要省略{},return,分号必须一起省略。