小编Ant*_*tiz的帖子

在Java中将ExecutorService转换为守护进程

我在Java 1.6中使用ExecutoreService,简单地开始

ExecutorService pool = Executors.newFixedThreadPool(THREADS). 
Run Code Online (Sandbox Code Playgroud)

当我的主线程完成时(以及线程池处理的所有任务),此池将阻止我的程序关闭,直到我显式调用

pool.shutdown();
Run Code Online (Sandbox Code Playgroud)

我可以避免不得不通过某种方式将此池使用的内部线程管理变为deamon线程来调用它吗?或者我在这里遗漏了一些东西.

java multithreading executorservice threadpool java-threads

68
推荐指数
5
解决办法
3万
查看次数

适合在沙箱中运行客户端代码的语言

我想在我的服务器上模拟(不安全)客户端代码,我正在寻找一种合适的语言来实现.我希望客户端使用与我用来模拟的语言相同的语言.

  • 安全是首要关注的问题
  • 最好是一种众所周知的语言(方便客户学习语法)
  • 应该很容易禁用/启用沙箱中可用的语言功能
  • 如果我能够逐步模拟代码,那将是一个加分

理想情况下,我只需构建一些接口(并发布这些接口),加载客户端代码,并通过允许它仅使用我的接口+我仔细选择的标准API的子集来模拟该代码.

在此模拟期间,我应该能够限制客户端代码使用的资源(时间和内存).如果我可以逐步模拟代码,那么我将总是可以返回确定性解决方案.

性能不是真正的问题.这个想法是允许客户为小型游戏/拼图编写自定义AI.游戏将被模拟(在服务器上!)并且结果返回给用户.

最初我在考虑自己构建一个外部DSL,包括解析器和评估器,但也许有一个现成的解决方案?

javascript c# java security sandbox

12
推荐指数
2
解决办法
1913
查看次数

在java中以原子方式获取多个锁

我有以下代码:注意:为了便于阅读,我尽可能地简化了代码.如果我忘了任何关键的部分让我知道.

public class User(){

    private Relations relations;

    public User(){
        relations = new Relations(this);
    }   

    public getRelations(){
        return relations;
    }
}


public class Relations(){

    private User user;

    public Relations(User user){
        this.user = user;
    }

    public synchronized void setRelation(User user2){
        Relations relations2 = user2.getRelations();

        synchronized(relations2){

            storeRelation(user2);

            if(!relations2.hasRelation(user))
                relations2.setRelation(user);
        }
    }   

    public synchronized boolean hasRelation(User user2){
        ... // Checks if this relation is present in some kind of collection
    }

    /*Store this relation, unless it is already present*/
    private void storeRelation(User user2){
        ... …
Run Code Online (Sandbox Code Playgroud)

java deadlock locking synchronized

4
推荐指数
1
解决办法
2418
查看次数

如何使用和findall/3元谓词

我想写这个:

paths( Result ) :-
    findall( B, f(B) , Result ).

f( B ) :-
    f1( B ),
    f2( B ).
Run Code Online (Sandbox Code Playgroud)

只有一行.所以基本上是这样的:

paths( Result ) :-
    findall( B, f1(B) AND f2(B), Result ).
Run Code Online (Sandbox Code Playgroud)

我不知道如何在目标陈述中表达'AND'.这有可能吗?

prolog prolog-findall

3
推荐指数
1
解决办法
689
查看次数

在synchronized块中声明的无法访问的变量 - Java

这段代码不会编译:

    synchronized( obj ) {
        Object a = new Object()
    }

    System.out.println( a.toString() );
Run Code Online (Sandbox Code Playgroud)

但我不知道为什么..我的理解是同步块总是最终被执行,所以我希望在synchronized块之后的代码能够知道任何新的声明变量.我哪里错了?

java synchronized synchronized-block

2
推荐指数
1
解决办法
390
查看次数