小编Gno*_*upi的帖子

在java中,多个线程在同一个字符串列表中工作?

我试图找出让多个线程在同一个字符串列表中工作的最佳方法.例如,假设我有一个单词列表,我想要多个线程来打印出这个列表中的每个单词.

这就是我想出的.该线程使用while循环,当迭代器具有next时,它会打印出来并从列表中删除它.

import java.util.*;
public class ThreadsExample {

    static Iterator it;

    public static void main(String[] args) throws Exception {

        ArrayList<String> list = new ArrayList<>();

        list.add("comet");
        list.add("planet");
        list.add("moon");
        list.add("star");
        list.add("asteroid");
        list.add("rocket");
        list.add("spaceship");
        list.add("solar");
        list.add("quasar");
        list.add("blackhole");


        it = list.iterator();

        //launch three threads
        RunIt rit = new RunIt();

        rit.runit();
        rit.runit();
        rit.runit();

    }
}

class RunIt implements Runnable {

    public void run()
    {
        while (ThreadsExample.it.hasNext()) {
            //Print out and remove string from the list
            System.out.println(ThreadsExample.it.next());

            ThreadsExample.it.remove();
        }
    }

    public void runit() {
        Thread thread …
Run Code Online (Sandbox Code Playgroud)

java string multithreading

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

订阅JFormattedTextField中的值更改的"好方法"是什么?

我想订阅JFormattedTextField上的值更改.

检查源代码,我唯一看到的是在新值上触发属性"value".但是这个属性只在那里被引用,并且直接写入,没有常量.如果我订阅此属性更改,它可以工作.

但是,我想知道:这是正确的方法吗?

java events swing jformattedtextfield

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

"存储过程'xxx'只能在非链式事务模式下运行." 在EJB上下文中从DataSource调用过程时出错

我们在Sybase中有一个数据库,我们可以从Java服务器访问它.

使用,直接通过Sybase驱动程序访问数据库DriverManager.它工作正常,我们能够调用我们的存储过程.

最近,我们正在迁移到应用程序服务器(在JBoss 5上),现在通过JNDI连接器调用数据库,使用DataSource:

Properties ppt = new Properties();
ppt.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
ppt.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
ppt.put("java.naming.provider.url", "jdbc/sybase");

InitialContext ctx = new InitialContext(ppt);
DataSource ds = (DataSource) ctx.lookup(AConfig.getInstance().getDatasourceJndiName());

Connection conn = ds.getConnection();
Run Code Online (Sandbox Code Playgroud)

(使用JBoss示例中的基本设置配置DataSource )

但是,在此设置中,有几个过程失败,出现此错误:

"存储过程' ** '只能在非链接事务模式下运行."

或者这种情况,对于其他情况(失败的命令改变):

多语句事务中不允许TRUNCATE TABLE命令

从我在互联网上发现的东西来看,它看起来像是JBoss中的东西,或者连接器本身正在打开一个事务,导致这些错误.因此,我能找到的针对这些特定问题的各种解决方案过于局部化,而且似乎是一个更大的问题.

有没有办法防止这种行为(假设这是实际问题)?


我在这个特定领域的知识非常薄,这对我来说是新的.因此,此描述可能缺少重要的细节.请指出我如何改进这个问题,如有必要,我可以添加哪些细节.

java sybase jboss ejb-3.0

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

在哈希码方法中使用^的原因是什么?

我今天发现了这段代码:

private static class Node{
    private final int code1;
    private final int code2;

    public Node(int code1, int code2) {
        this.code1 = code1;
        this.code2 = code2;
    }

    @Override
    public int hashCode() {
        return (code1 * 31) ^ code2;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Node) {
            Node node = (Node) obj;
            return node.code1 == code1 && node.code2 == code2;
        }
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

哈希码是否有充分的理由使用(code1*31)^ code2;

根据我的理解,创建哈希码的常用方法是将当前哈希码(或第一个字段)乘以素数,并为每个字段添加下一个字段.

为什么在这里需要电源 XOR运算符?

java hashcode xor

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