首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中获取独占系统范围的锁

在Java中获取独占系统范围的锁
EN

Stack Overflow用户
提问于 2010-07-07 19:26:58
回答 6查看 7K关注 0票数 17

我正在重新处理一个可能会多次启动的Java可执行文件,我希望这个过程一次只执行一个。在C#中,我可以使用命名/系统Mutex来实现这一点,但在Java语言中,这似乎是不可能的。如何实现此功能?

EN

Stack Overflow用户

发布于 2019-04-08 19:08:57

在我看来,这种情况可以用Singleton设计模式来解决。在Windows中使用C时,我通过使用MutexCreateGlobal()调用解决了这个问题。在使用OOP语言(即Java)时,修改后的Singleton设计模式似乎可以做到这一点。

代码语言:javascript
复制
public class Singleton {

    // **** members ****
    private static  Singleton   singleInstance = null;

    private static  Semaphore   sem = new Semaphore(1);

    public          int         val = 0;

    // **** constructor ****
    private Singleton() {
        val = 0;
    }

    // **** get instance of this class ****
    public static Singleton getInstance() {

        // **** request access ****
        try {
            sem.acquire();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // **** instantiate this class (if needed) ****
        if (singleInstance == null) {

            // **** instantiate Singleton ****
            singleInstance = new Singleton();

            // **** inform user what is going on ****
            System.out.println("hashCode: " + singleInstance.hashCode());
        }

        // **** release access ****
        sem.release();

        // **** return this class ****
        return singleInstance;
    }

}
票数 0
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3194227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档