Tag: singleton

在google appengine后端只运行一个后台线程

正如在文档中提到的,我在后端运行一个后台线程,其中一个实例是无限的,用于一些连续的后台处理。 import com.google.appengine.api.ThreadManager; import java.util.concurrent.AtomicLong; AtomicLong counter = new AtomicLong(); Thread thread = ThreadManager.createBackgroundThread(new Runnable() { public void run() { try { while (true) { counter.doStuff() Thread.sleep(10); } } catch (InterruptedException ex) { throw new RuntimeException(“Interrupted in loop:”, ex); } } }); thread.start(); 我已将此代码绑定到_ah / start端点,以便在实例启动后执行它。 但是,当在本地服务器上运行时,我看到_ah / start请求在运行时期间多次出现,并且它启动了多个这样的线程。 我一次只需要一个线程来减少后台处理中的争用。 有没有办法抓住现有的bg线程并检查它是否正在运行,以便可以避免新的线程创建? 更新将此代码上传到云后我还观察到,每次在后端调用_ah / start时,它会生成一个新线程作为_ah / […]

单身懒惰加载模式

我正在尝试编写Singleton Lazy Loading Pattern。 这是class级: public class IMDBLookup { private static class LazyLoad { private static final IMDBLookup IMDB_LOOKUP; static { IMDB_LOOKUP = new IMDBLookup(); } } public static IMDBLookup getInstance() { return IMDBLookup.LazyLoad.IMDB_LOOKUP; } } 我想知道我是否以正确的方式做到了这一点? 提前致谢。

枚举和单身 – 顶级vs嵌套枚举

现在众所周知,在java中创建单例的推荐方法是通过枚举(参见例如此处 ) 但是(例如在这个答案中 )似乎(在评论中回复我的@MikeAdler)考虑在单例类中使用枚举的正确方法(例如,请参阅此处的完整示例,或给出的代码)下面)。 我似乎并不真正理解这个的需要/使用 – 有人可以详细说明(并且最好为这个成语提供正确的方言)吗? public class Enclosing { private Enclosing() {} static enum Singleton { INSTANCE; private static final Enclosing singleton = new Enclosing(); public Enclosing getSingleton() { return singleton; } } } 编辑:一个人将通过Enclosing.Singleton.INSTANCE.getSingleton();获得单身人士Enclosing.Singleton.INSTANCE.getSingleton();

@Dependent @ javax.ejb.Singleton与@ApplicationScoped @ javax.ejb.Singleton?

从本质上讲,这两个类之间有什么区别: @ApplicationScoped @Singleton class A {} @Dependent @Singleton class B {} 上下文EJB实例 在查找EJB时,我不想使用@Inject ,除非EJB是@Stateful ,我希望CDI容器管理有状态的生命周期,这可能非常方便。 否则,使用@Inject检索上下文EJB实例有点危险。 例如,除非我们也编写生产者,否则无法使用CDI检索@Remote客户端视图。 此外,A类和B类不能声明任何其他范围而不是它们目前的范围。 CDI 1.1 ,“3.2会话bean”部分说: 单例bean必须属于@ApplicationScoped范围或@Dependent伪范围。 如果会话bean指定了非法范围,容器会自动检测问题并将其视为定义错误。 因此,除了有状态bean之外,当我去寻找EJB时,我认为使用CDI毫无意义。 一个更成熟的问题版本 从客户端代码的角度来看,使用@Inject来声明对A或B的依赖,我无法想象存在差异。 在这两种情况下,调用都将路由到单例EJB。 如果我是CDI提供者的实现作者,那么我甚至可能在两种情况下注入真正的EJB代理并忽略将来要求销毁依赖CDI代理的调用? 底线是我们可以在EJB单例类上声明两个不同的范围。 那有什么区别?

如何处理OO应用程序中的跨领域问题? 使用Singleton? dependency injection? 什么?

假设我正在设计一个应用程序,我需要使用全局计时系统(这是一个跨领域的问题)。 我需要从我的应用程序的任何地方访问来自该全球计时系统的数据,并且我不能看到“应用程序的这部分需要它而另一部分不需要”。 我的问题是..我应该将其设计为一种环境语境(在这种情况下,单身人士),还是应该尝试设计其他方式来适应这种情况? 我当然不认为让我的所有类必须通过构造函数注入将这个全局计时类传递给它们是正确的。 很多时候我必须将参考文件真正传递到链中,直到某些类最终需要它。 另一方面,从阅读的角度来看,它会使一切变得更加清晰(它清楚地说明了我的类的依赖性)。 人们通常如何处理这个问题? 有没有其他技术可以帮助解决这个问题? AOP可能吗? PS:全球计时系统只是我从一本我正在阅读的书中获取的一个想法。 日志系统将是这类问题的另一个很好的例子。 谢谢

如何在java中创建一个真正的单例?

在多个类加载器中使用时,我遇到了我的单例问题。 例如,Singleton由多个EJB访问。 有没有办法创建一个在所有类加载器中只有一个实例的单例? 我正在寻找使用自定义类加载器或其他方式的纯java解决方案。

春豆线安全

我正在为一个Java类声明一个Spring bean,它用作创建对象的工厂。 我想从不同的线程使用这个工厂,我遇到的问题是线程在尝试使用工厂创建对象时被阻止。 据我所知,春豆是默认的单身人士,这就是我想要的。 我希望工厂是一个单身人士,但我想从不同的线程使用这个工厂创建对象。 工厂中的方法createObject()未同步,因此我不太清楚为什么我遇到此同步问题。 有关哪种方法是实现这一目标的最佳方法? 这是工厂的java代码: public class SomeFactory implements BeanFactoryAware { private BeanFactory beanFactory; public List createObjects() { List objects = new ArrayList(); objects.add((SomeObject)beanFactory.getBean(SomeObject.class.getName())); return objects; } public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } }

线程安全的Enum Singleton

枚举有助于创建单身人士。 我知道枚举方法不是线程安全的,所以我试着让它成为线程安全的。 任何人都可以确认这种实施是否正确。 是否可以使用静态和易失性这么多地方并且可以进行优化? 由于内部类是私有的,因此我必须在枚举中创建函数以访问内部类function。 可以优化吗? import java.util.Date; public enum SingletonWithEnum { INSTANCE; private static class Singleton{ private static volatile int count; private static volatile Date date; public static int getCount() { return count;} public static void setCount(int countParam) { synchronized(Singleton.class){ count = countParam; }} public static Date getDate() { return date;} public static void […]

单身人士并不是一个单身人士

我有这样的情况,我在运行嵌入式服务器的代码和我的Web应用程序之间共享单例。 我有类和部署工具的战争。 当我printf实例时,我看到: abc.Abc@173a10f abc.Abc@105738 所以这不是单身人士。 这是怎么回事? 我的服务器Jetty启动代码: public static void main(String[] args) throws Exception { System.out.println(MySingleton.getInstance()); // start Jetty here and deploy war with WebAppContext() } 我的ServletContextListener端代码: public class AppServletContextListener implements ServletContextListener{ @Override public void contextInitialized(ServletContextEvent arg0) { System.out.println(MySingleton.getInstance()); } } 我的单身人士: public class MySingleton { private static MySingleton INSTANCE = new MySingleton(); private […]

Java EE 6和Singletons

任何人都可以解释在Java EE 6应用程序中实现Singleton的完整过程吗? 我假设我不应该以声明静态变量的典型方式创建单例,而应该使用@Singleton注释? 我必须这样做吗? 这只是宣告@Singleton的情况吗?就是这样吗? 我还要上课了吗? 那么我需要做什么才能访问其他类中的单例?