我试图找出让多个线程在同一个字符串列表中工作的最佳方法.例如,假设我有一个单词列表,我想要多个线程来打印出这个列表中的每个单词.
这就是我想出的.该线程使用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) 我想订阅JFormattedTextField上的值更改.
检查源代码,我唯一看到的是在新值上触发属性"value".但是这个属性只在那里被引用,并且直接写入,没有常量.如果我订阅此属性更改,它可以工作.
但是,我想知道:这是正确的方法吗?
我们在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中的东西,或者连接器本身正在打开一个事务,导致这些错误.因此,我能找到的针对这些特定问题的各种解决方案过于局部化,而且似乎是一个更大的问题.
有没有办法防止这种行为(假设这是实际问题)?
我在这个特定领域的知识非常薄,这对我来说是新的.因此,此描述可能缺少重要的细节.请指出我如何改进这个问题,如有必要,我可以添加哪些细节.
我今天发现了这段代码:
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运算符?