java什么时候声明static方法

1.经常用到的方法,可以声明为static,这样省去了每次new对象的内存空间,因为非static方法,需要new对象才能调用此方法。但因此也产生多线程访问线程安全问题

比如:


import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.*;

/**
 * @version V1.0
 * @ClassName: CompressUtil
 * @Description: 压缩单个文件
 */
@Slf4j
public class CompressUtil {
    public static final int CORE_POOL_SIZE = Runtime.getRuntime().availableProcessors() * 2;

    /**
     *初始化线程池
     * @param threadName: thread name
     * @return
     */
    public static ExecutorService initPoolExecutor(String threadName) {
        ThreadFactory guavaFactory = new ThreadFactoryBuilder().setNameFormat(threadName).build();
        ThreadPoolExecutor pool =  new ThreadPoolExecutor(CORE_POOL_SIZE,
                256,30L, TimeUnit.MILLISECONDS,
                new LinkedBlockingQueue<>(Integer.MAX_VALUE), guavaFactory);
        pool.allowsCoreThreadTimeOut();
        return pool;
    }
}

只初始化一个线程池。

2.当一个方法或者变量需要在类加载器加载类的时候,就需要初始化时,声明为static。Static变量在项目启动时就分配内存,直到程序结束释放内存。static和const变量在项目启动时就已经分配内存了,而且方法调用之后也不会被释放。

3.声明为static方法后,内存中就只有一份数据了。所以就要注意线程安全问题,就需要加同步处理。线程就会等待访问了,就会有线程安全问题。

上一篇:模拟队列


下一篇:背包基础