春豆和线程

时间:2012-07-03 15:27:42

标签: multithreading spring javabeans

我必须在webapp中创建一个进度条。我需要一个执行该工作的线程和一个控制器来测试该线程以获得其状态 如何使用bean设置它(在那个线程中我需要自动连接一些服务)?我可以将线程用作非单例bean吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

我会为此创建一个小包装类。您可以让类中的所有setter处理注入的服务,您可以使用InitializingBean来启动线程,并且可以将bean注入其他类,以便它们可以在volatile上调用getter或者synchronized个字段。类似的东西:

public class ProgressBar implements InitializingBean, Runnable, DisposableBean {
    private volatile int someField;
    private Thread thread;
    // start the thread after the properties are set
    public void afterPropertiesSet() {
        thread = new Thread(this);
        // maybe make it a daemon thread
        // thread.setDaemon(true);
        thread.start();
    }
    // stop it when spring is shutting down
    public void destroy() {
        thread.interrupt();
    }
    public void run() {
       ... thread code goes here
    }
    // spring setter
    public void setSomeService(SomeService someService) {
       this.someService = someService;
    }
    // getter used by other beans to get some value from this class
    public int getSomeField() {
        return someField;
    }
}

当然,你也可以使用一些spring的计时器类,虽然它们可以更好地用于经常运行的重复性任务。