JAVA设计模式之享元模式(flyweight)

Posted 引路的风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA设计模式之享元模式(flyweight)相关的知识,希望对你有一定的参考价值。

享元模式就是所谓的池化的思想,数据库连接池、线程池、JAVA String用的就是享元模式。有兴趣可以去阅读其底层实现原理。这里就不赘述了。

享元模式模拟java线程池代码如下:

package com.srr.dp.flyweight;

import java.util.ArrayList;
import java.util.UUID;


/**
 * 自定义线程
 */
class Thread implements Runnable{
    public Thread(String name){
        this.name = name;
    }
    private String name;

    private boolean isRuning = false; //false:未运行,true:运行

    @Override
    public void run() {

    }

    public boolean getState(){
        return isRuning;
    }

    public void setState(){
        isRuning = true;
    }

    public String getName(){
        return name;
    }
}

public class TreadPool {

    private ArrayList<Thread> treads = new ArrayList<>();
    {
        for(int i = 0;i < 10;i++){
            treads.add(new Thread("thread-"+i));
        }
    }

    public Thread getThread(){

        for(int j =0 ;j< 10;j++){
            Thread t = treads.get(j);
            if(!t.getState()) {
                System.out.println("从线程池中获取线程"+t.getName());
                return t;
            }
        }
        //如果池子中线程都使用完,那么new新的线程
        Thread t = new Thread(UUID.randomUUID().toString());
        System.out.println("随机生成线程"+t.getName());
        return t;
    }

    /**
     * 测试
     * @param args
     */
    public static void main(String[] args) {
        TreadPool pool = new TreadPool();

        for(int i=0; i<12; i++) {
            Thread t = pool.getThread();
            t.setState(); //获取一个线程那么将其状态设置为true,代表正在使用中
        }

    }


}

 运行结果:

以上是关于JAVA设计模式之享元模式(flyweight)的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之享元模式 FlyWeight

23种设计模式之享元模式(FlyWeight)

java设计模式之享元模式

设计模式---对象性能模式之享元模式(Flyweight)

秒懂设计模式之享元模式(Flyweight Pattern)

设计模式系列之享元模式(Flyweight Pattern)——实现对象的复用