java中的低效线程

我目前有一些问题需要理解为什么在某些情况下,Java中的并行化似乎效率低下。 在下面的代码中,我构建了4个使用ThreadPool执行的相同任务。 在我的Core i5(2核,4线程)上,如果我将工作器数设置为1,则计算机需要大约5700ms并使用25%的处理器。 如果我将worker的数量设置为4,那么我会观察100%的CPU使用率,但是…计算的时间是相同的:5700ms,而我预计它会低4倍。 为什么? 这是正常的吗? (当然我的真正任务更复杂,但这个例子似乎重现了这个问题)。 提前谢谢你的答案。 这是代码: public class Test { public static void main(String[] args) { int nb_workers=1; ExecutorService executor=Executors.newFixedThreadPool(nb_workers); long tic=System.currentTimeMillis(); for(int i=0; i<4;i++){ WorkerTest wt=new WorkerTest(); executor.execute(wt); } executor.shutdown(); try { executor.awaitTermination(1000, TimeUnit.SECONDS); } catch (InterruptedException e) {e.printStackTrace();} System.out.println(System.currentTimeMillis()-tic); } public static class WorkerTest implements Runnable { @Override public […]

Eclipse继续运行我的旧Web应用程序

OMG – Eclipse正在发生什么(3.3欧罗巴) – 有没有人遇到这个问题(记住我一直在搞乱卸载不同的Tomat容器和安装其他容器 – 但无论如何这是另一个故事) 当我更改一行代码或删除我的项目中的一个类时 – 当我来调试时 – 它实际上会转到一条注释掉的行并运行该行而不管!!!! 例如 //System.out.println(“你不应该读这个!”); 更新:这可以通过设置项目 – >自动构建来解决(请参阅下面的答案)。 剩余问题: Eclipse不会使我的热部署文件夹保持最新状态以及对项目的最新更改: 我惊恐地发现,我的项目的一些旧的退休人员在我认为Eclipse用于热部署或其他东西的文件夹中“闲逛” C:\ myJavaCode.metadata.plugins \ org.eclipse.wst.server.core \ TMP0 \ wtpwebapps \ myWebApp 基本上它实际上并没有复制我工作目录的类中所做的任何更改!?!?? ……无论如何 – 为了让我的项目保持最新 – 我也必须修改这个文件夹 – 完全不可接受 – 因为你不能以这种方式发展 – 它会花费你的时间! 无论如何,如果有人能帮我解释一下我做了什么愚蠢的事情让我陷入困境中以及如何摆脱这种混乱 – 我真的很感激。

Java HttpURLConnection和pooling

在阅读了Java HttpURLConnection上的各种文档之后,我仍然感到很困惑,因为它有什么样的集合以及如何处理连接。 例如,以下代码 URL url = new URL(someUrl); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); OutputStream os = connection.getOutputStream(); InputStream is = connection.getInputStream(); /** Write something to os and flush */ /** Read from is */ os.close(); is.close(); connection.disconnect(); 是否需要刷新和关闭以使底层套接字可重用? connection.disconnect()关闭底层套接字(从而使其无法使用)吗? keep-alive会影响这种行为吗? 如果我使用不同的URL对象,但使用相同的URL,那么从它们创建的connection是否会共享底层套接字? 如果URL的主机部分相同但路径不同,该怎么办? 什么时候汇集连接会被破坏? 什么是控制池大小的系统属性? 此外,如果您还可以将Android版本与Java进行比较,那将会非常棒。 谢谢

如何为类型的子类实现GWT编辑器?

假设我有一个像这样的对象层次结构: 帐户>网站>供应 账户是一个实际的公司,一个网站是他们拥有的建筑,而一个供应是ElecSupply或GasSupply 。 供应从未实例化,理论上可能是一个抽象的阶级。 我使用Objectify进行持久化,并有一个页面显示每个站点的供应列表,无论它们是ElecSupply还是GasSupply 。 现在我正在实现GWT编辑器框架 ,并遇到了这个多态实体的问题。 如何为这样的对象实现编辑器和子编辑器集? @Entity public class Supply implements Serializable { @Id protected Long id; @Embedded protected List billingPeriods = new ArrayList(); public Supply() { } // … } 子类:( ElecSupply有5个独特的字段,GasSupply只有一个) @Subclass public class ElecSupply extends Supply implements Serializable { private String profile; private String mtc; private String llf; […]

如何在java中计算表达式?

如何在java中计算用户给定的表达式。 E:g,如果给定的exp为3 * 4 +(5 * 6),如何计算。 谁能帮我吗。

Struts 2#{}在Netbeans 7.3中给出了编译错误

我正在使用Netbeans 7.3,我已经创建了一个maven Struts 2.3项目。 其他一切似乎都很好,除非我在JSP中写这样的东西: <s:select list="#{'-1':'All Activity','0':'Posts Only','1':'Trades Only'}" 上面的代码在JSP中给出了错误。 虽然它曾经在6.9中运行良好,但似乎对我来说就像一个bug。 任何帮助将非常感激。 我已经在插件页面上发布了关于它的评论,虽然在我看来不像插件问题左右,因为maven与NB插件AFAIK无关。

如何将表从一个数据库复制到另一个数据库?

我需要从一个数据库中取一个表并将其上传到另一个数据库。 所以,我创建了两个单独的连接。 这是我的代码 Connection connection1 = // set up connection to dbms1 Statement statement = connection1.createStatement(); ResultSet result = statement.executeQuery(“select * from …………. “); Connection connection2 = // set up connection to dbms2 // Now I want to upload the ResultSet result into the second database Statement statement2 = connection2.createStatement(“insert into table2 ” + result); […]

预期。 java的

我有这段java代码。 我是java中的菜鸟.. 错误: expected cfg = new Config; 码: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.HashSet; import java.util.Set; import java.io.*; import java.util.*; import java.util.Properties; public class Config { Properties configFile; public Config() { configFile = new java.util.Properties(); try { configFile.load(this.getClass().getClassLoader().getResourceAsStream(“config”)); }catch(Exception eta){ eta.printStackTrace(); } } public String getProperty(String […]

Java发现时间差异

我发现时间差异时有一些问题,如果我试图在今天的时间找到差异(比如t1 =“08:00:00”和t2 =“10:00:00”那么它给出了正确的输出,但是当我试图找到差异,如t1 =“20:00:00”(这是今天的时间)和t2 =“08:00:00”(这是第二天早上),我希望输出为12小时,但我得到输出错误。 请帮助我。 String t1 = “20:00:00”; String t2 = “12:00:00”; String t3 = “24:00:00”; SimpleDateFormat sDf = new SimpleDateFormat(“HH:mm:ss”); Date d1 = sDf.parse(t1); Date d2 = sDf.parse(t2); Date d3 = sDf.parse(t3); long s1,s2,s3,s4,dif1,dif2,dif3,minutes,hrs; dif1 = d2.getTime() – d1.getTime(); s1 = dif1/1000; System.out.println(“s1 “+s1); if(s1<0){ dif2 = d3.getTime() – d1.getTime(); s2 = […]

从扩展Generic中提取generics类型

我正在尝试重构一个类和一组子类,其中M类型确实扩展了任何东西,即使我们知道它必须是某种类型的子类。 该类型是参数化的,我希望它的参数化类型可用于已经具有M值的子类。 有没有办法定义这个类,而不必在参数列表中包含冗余的K和Vgenerics类型。 我希望能够让编译器从子类映射到的M中推断出它们。 public abstract class NewParametrized<K, V, M extends SomeParametrized> { public void someMethodThatTakesKAndV(K k1, V v1) { } } 换句话说,我希望类声明看起来像: public class NewParametrized<M extends SomeParametrized> { K和V的类型将从M.的定义推断出来。