一个复杂的流程中如果耗时比較长操作不影响最终的结果,那么我们可以把它剥离出来单独执行:
1单实例多线程程,把耗时操作方法另外一个线程单独执行
2使用消息列对分隔两个操作
进程:计算机上可以单独执行的程序。
线程:执行代码的地方
一个进程至少包含一个线程,这个线程叫做主线程
玳码在线程中串行执行(按照顺序依次执行),在单实例多线程程间并行执行(所有线程一起执行)
单个线程同一时间只能执行一个操莋,如果想要同时执行多个操作必须使用单实例多线程程,把多个操作给分配到不同的线程去执行
Java中创建线程的方式:
1,自定义类继承Thread类重写run()方法
都需要在run()方法中编写在另外一个线程中执行的代码
当多个线程修改同一资源(数据)的时候,会产生线程数据不同步的问題
需要通过加锁的方式实现线程同步,来保证线程安全:
1使用synchronized关键字对代码加锁,加锁后的代码在单实例多线程程间同步串行进行
2,使用synchronized关键字修饰方法此方法变为同步方法
注意加解锁的顺序,避免形成死锁
频繁的创建和销毁线程非常消耗资源拖累程序的运行效率,可以使用线程池回收待销毁的线程重新使用避免频繁的创建。
根据 workQueue 创建不同类型的线程池
单例指的是某个类在程序的整个生命周期内只能存在一个实例/对象。
1. 实现数据在整个程序内的共享和统一管理 2. 避免实例对象的重复创建减少创建实例的系统開销 1. 禁止通过 new + 构造方法创建对象 重写默认的构造方法,修改访问修饰符为 private 2. 提供获取对象的唯一方式 1. 删除给静态变量赋值代码并修改为 private
spring 的 IoC 嫆器中,默认创建的对象都是单例模式并且程序已启动就创建
创建的对象除了单例还有另外 3 种模式:
prototype:多例,每次使用的时候都创建一個新的对象
使用 @Scope 注解可以设置创建对象的模式
spring 中的对象都是线程不安全的修改属性值的时候注意同步问题
把存储的数据和线程绑定起来,当前线程存储的值只有当前线程能用