多线程程序访问共享数据会产生安全问题
解决线程安全问题
同步代码块
synchronized(锁对象){
可能出现线程问题的代码
}
同步方法
修饰符 synchronized 返回值类型 方法名(){
可能出现线程问题的代码
}
静态同步方法
修饰符 static synchronized 返回值类型 方法名(){
可能出现线程问题的代码
}
静态方法的锁对象是本类的class属性
Lock锁
void lock() 获取锁
void unlock() 释放锁
在成员位置创建ReentrantLock对象
在可能出现问题代码前lock()
在可能出现问题代码后unlock()
线程的7种状态
1.出生状态
2.就绪状态
3.运行状态
4.等待状态 调用wait()方法等待,通过notify()方法唤醒 notifyAll()唤醒所有等待线程
5.休眠状态 sleep()方法
6.堵塞状态
7.死亡状态
线程池、
创建多个线程,保存到一个集合中,当需要使用时,从集合中取出来给线程使用
Executor类 生成线程池类
通过方法 newFixedThreadPool() 返回一个ExecutorService接口
ExecutorService中的submit()方法 从线程池中获取线程 void shutdown()方法 关闭/销毁线程池方法
Lambda表达式 函数式编程思想
格式
(参数列表) ->{重写方法的代码}
():接口中的抽象方法
->:传递
{}:重写抽象方法的方法体
优化:1.数据类型一样可以省略,如果只用一个参数()也可以省略 2.如果{}中代码只有一行 {},return,;可以省略