StringBuffer是安全的,StringBuilder是不安全的,那么这个多线程环境具体是指什么呢?
请问下Java Web项目当中,action类属于什么多线程环境吗?
多线程环境就是应用程序中启动了多个线程,共享变量可能同时被多个线程同时访问的场景,如果是这样的话,对这些共享变量的访问必须做同步处理才能保证数据的一致性。StringBuilder类的方法作了同步即使用了synchronized加锁,所以能保证共享数据的正确,是线程安全的,而StringBuffer没有,所以是不安全的。
单线程环境就是整合应用程序中只有一个主线程,没有其他线程竞争。多线程环境下必须进行数据同步处理,才能保证正常的逻辑。
action是曝露在多线程环境下的,因为它是单例对象,但是每个请求都是由一个线程处理的,线程共享同一个action就涉及到线程同步问题。
一个string类型的变量值经历过多个线程的操作
如果StringBuilder属于多个线程同时操作的共享资源时,则处于多线程环境,容易出现线程安全问题,所以不建议使用StringBuilder;而StringBuffer内部实现线程同步机制,当多个线程同时操作StringBuffer时不会导致线程安全问题。