假设我知道我将在x64 cpu上运行,我可以忽略哪些JVM同步实践?

我知道JVM内存模型是为CPU的最小公分母而设计的,因此它必须假设JVM可以运行的最弱的cpu模型(例如ARM)。 现在,考虑到x64具有相当强大的内存模型,假设我知道我的程序只能在64位x86 CPU上运行,我可以忽略哪些同步实践? 当我的程序通过虚拟化运行时,这也适用吗? 例: 众所周知,JVM的内存模型需要同步对long和double的读/写访问,但可以假设其他32位原语(如int,float等)的读/写是primefaces的。 但是,如果我知道我在64位x86机器上运行,我是否可以忽略使用long / double上的锁定知道cpu将自动读取/写入64位值并保持它们不稳定(就像我对int / floats一样) )?

检查Java中的double是否是无限的

我正在为这个家庭作业制作一个简单的计算器,Java在除以0时返回“Infinity”。 当我得到无限时,我需要显示一些错误信息。 问题是我不知道该怎么办 double result; result = 4/0; //if result == infinity then some message – need help with this

如何将java.sql.Timestamp增加14天?

我有一个应用程序,它将一个时间戳作为sql选择的开始日期和结束日期的边界,我希望从今年的第一个星期一开始,将今年的周数填充一个hashmap作为值和周数作为键。 我发现很难使用时间戳,我觉得增加86,400,000秒来增加一天的感觉并不是很好,因为这并没有考虑到闰日,小时,秒。 我计划在其中添加13天23小时59分59秒,以便我可以按周查找地图中的开始日期作为关键字,然后使用开始日期来获取结束日期。 所以我想尝试得到这样的东西: Week startDate endDate 1 2011-01-03 00:00:00 2011-01-16 23:59:59 2 2011-01-17 00:00:00 2011-01-30 23:59:59 使用Map中的前两列,并在查找后计算最后一列。 如何安全地增加java.sql.Timestamp?

CipherInputStream和CipherOutputStream不生成文件

我有以下代码。 但是文件b.xlsx和c.xlsx是0字节。 为什么CipherOuputSteam不工作? public static void main(String[] args) throws Exception { KeyPair keys = KeyPairGenerator.getInstance(“RSA”).generateKeyPair(); Cipher cipher = Cipher.getInstance(“RSA”); cipher.init(Cipher.ENCRYPT_MODE, keys.getPublic()); FileInputStream fis; FileOutputStream fos; CipherOutputStream cos; fis = new FileInputStream(“C:/temp/a.xlsx”); fos = new FileOutputStream(“C:/temp/b.xlsx”); cos = new CipherOutputStream (fos, cipher); byte[] block = new byte[8]; int i; while ((i = fis.read(block)) != -1) { […]

为什么InvokeLater导致我的JFrame无法正确显示?

好的,我已经阅读了网上的搜索结果,但我还没有找到问题的解决方案,也许我错过了一些简单的东西,因此我在这里…… 我有一个相当大的项目,处理维修业务的工单。 这是所有数据库连接,许多页面的代码和类。 但我只是在前端添加了一小段代码,实质上是在我们的笔记区域中检查新消息。 无论如何,我显示一个带有两个JLabel的简单JFrame ,而一个单独的线程查询数据库。 这一切都发生在程序的开始。 问题是我的小“请等待” JFrame提出了它的框架但没有胆量,没有背景,没有JLabel ,在等待期间(这是程序加载的其余部分,而不是数据库线程),显示后,但到那时它错过了它的观点。 我写了以下示例程序。 它显示一个简单的JFrame (CheckingMessagesGUI:一个带有两个JLabel的JFrame ,仅此而已)hibernate5秒然后显示Example(主程序) JFrame ,然后在这个例子中立即关闭( System.exit(0) ),当然我的真正的计划继续做更多。 我发现invokeLater似乎导致了这个问题。 一旦睡眠定时器用完,窗口就会显示,但显示它的代码是在Thread.sleep命令之前给出的,应该按照那个顺序完成了吗? 我的问题是为什么invokeLater会导致我的JFrame无法正确显示? 我的理解是invokeLater的目的是让项目在正确的AWT事件线程上运行,这会让我觉得这个窗口会被正确绘制。 无论如何,我确定我错过了一些明显的东西。 我在下面的代码中注释掉了invokeLater部分,它运行正常,如果你把它放回去它不… 提前谢谢了。 package javaapplication6; public class Example extends javax.swing.JFrame { public Example() { System.out.println(“Example started”); setBounds(100,100,200,200); System.out.println(“cmGUI instantiated”); CheckingMessagesGUI cmGUI = new CheckingMessagesGUI(); System.out.println(“Set cmGUI visible”); cmGUI.setVisible(true); cmGUI.validate(); try { System.out.println(“timer started”); […]

与另一个任务并行运行任务

我有以下使用FooProcessor类的Foo类。 所以我想要做的是,在运行cp1实例进程方法的同时,我想运行cp2.process() 。 public class Foo { public static void main(String [] args){ FooProcessor cp1 = new FooProcessor(); FooProcessor cp2 = new FooProcessor(); cp1.process(); // in parallel process cp2.process(); } } public class FooProcessor { public void process(){ System.out.println(“Processing..”); } } 但是,我想顺序cp1,所以我希望它运行并完成,如果cp2没有完成或失败它是好的。 如果它失败了我想加入结果。 它没有返回此示例中的任何内容,但我想返回结果。 为此,应该使用TaskExecutor吗? 还是线程? 我只希望cp2与cp1并行运行。 或者如果我添加更多让我们说cp3,我希望它与cp1并行运行。

Java:如何严格解析日期?

SimpleDateFormat是一种非常友好的解析器,可以滚动生成的日期而不是抛出错误。 如何在没有正则表达式等的情况下严格解析日期? fmt = new SimpleDateFormat(“dd.MM.yyyy”) fmt.parse(“10.11.2012”) // it works fmt.parse(“10.1150.2012”) // it works but it’s unwanted

乌克兰(西里尔文)字符未显示在Jasper报告PDF中

我试图在jasper报告中显示ukranian字符作为pdf文件。 但它不是以pdf格式显示的。 当我将报告导出到所有其他格式如html时,显示csv..ukranian char。

如何在同一行上实例化对象和调用setter?

如果我有一个带有默认构造函数的Employee类: private String firstName; public Employee(){} 和一个二传手: public void setFirstName(String firstName){ this.firstName = firstName; } 为什么这个尝试无法实例化并在同一行中调用setter? Employee employee = new Employee().setFirstName(“John”);

使用Intellij在远程服务器上部署/调试Java代码

我想在远程服务器上运行我的java代码以获得更快的速度(服务器非常强大)。 我想要的是将我的Intellij连接到该远程服务器并运行我的代码。 但我仍想在我的本地机器(即我的笔记本电脑)上使用IntelliJ。 我在IntelliJ中找到了一个配置部分,它在Default Setting->Build-executation-deployment-> Deployment ,我可以设置远程服务器的地址和用户名和密码。 但我不知道接下来该做什么。