LongAdder的表现如何比AtomicLong更好

我看到Java的AtomicInteger如何在内部使用CAS(比较和交换)操作。 基本上,当多个线程尝试更新该值时,JVM在内部使用底层CAS机制并尝试更新该值。 如果更新失败,则再次尝试使用新值但从不阻止。 在Java8中,Oracle引入了一个新的类LongAdder ,它在高争用下似乎比AtomicInteger表现更好。 一些博客文章声称LongAdder通过维护内部单元格表现更好 – 这是否意味着LongAdder在内部聚合值并在以后更新它? 你能帮我理解LongAdder的工作原理吗?

Java接口上的多重inheritance

我认为多重inheritance在Java中总是非法的,但是这段代码编译: public interface A { void a(); } public interface B { void b(); } public interface AB extends A, B { } 像AB这样的空接口会被视为不良做法吗? 有没有办法在避免空接口(使用generics或其他方式)的同时实现类似的东西? 注意:我不是在问如何通过接口模拟多重inheritance。 我意识到我可以做到以下几点: public class AbImpl implements A, B { public void a() {} public void b() {} } 由于各种原因,我需要一个具有两种方法的接口。

进行涉及Java的RAW套接字编程的最佳方法

我有一些现有的C代码使用ICMP原始套接字来执行Ping,我需要在Java中使用此代码,因为Java不支持ICMP包。 当我在JNI中包装代码并调用它时,C代码在执行以下操作时无法获取套接字: socket(AF_INET,SOCK_RAW,1); 我想Java已经放弃了一些禁用Java进程中使用原始套接字的权限。 我必须找到解决方案。 我观察到以下情况: 如果我编写一个C程序并使用Runtime从Java调用它,分叉代码可能会打开套接字。 如果我从Eclipse运行这个本机代码,它也运行良好。 我想这是因为Eclipse已经从eclipse.exe启动,而不是从java.exe启动。 这意味着我可以通过选择这两种策略中的一种来解决我的问题,但我也不喜欢。 有没有其他方法可以让Java接受JNI代码打开这个套接字? 编辑:我越是关注这个问题,我认为它必须与Windows 7的启动方式有关。 看起来如果你让Windows运行起来,或者你在Windows以外的其他平台上,也可以使用InetAddress.isReachable()方法。

通过套接字发送文件

你好我试图在java中使用客户端 – 服务器类发送文件。 出于某种原因,当调用发送文件的方法时,套接字关闭。 这是代码: FileInputStream fIn = new FileInputStream(file); out = new BufferedOutputStream(clientSocket.getOutputStream()); byte fileContent[] = new byte[(int) file.length()]; fIn.read(fileContent); for (byte b : fileContent) { out.write(b); } 和来自客户端的代码: FileOutputStream fIn = new FileOutputStream(“testing”); BufferedInputStream inAout = new BufferedInputStream(clientSocket.getInputStream()); byte fileContent[] = new byte[1000000]; inAout.read(fileContent); fIn.write(fileContent); 和我得到的错误消息:SEVERE:null java.net.SocketException:Socket关闭 我真的没有经验,所以如果有任何可以帮助它会很棒。

大写字母后插入空格

如何将”HelloWorld”为”Hello World” 。拆分必须基于大写字母,但应排除第一个字母。 PS :我知道使用String.split然后合并。只想知道是否有更好的方法。

什么时候可以捕获NullPointerException?

有效的java建议我们不要catch NullPointerException 。 总是对的吗? 在很多捕获NullPointerException情况下,catch body只调用printStackTrace() 。 如果我没有捕获NullPointerException并调用printStackTrace() ,我如何检查发生exception的位置? 而且如果我捕获NullPointerException并且catch体是空的,那么我们当时无法得到任何堆栈信息,是吗? UPDATE 我分析了google android源码AOSP4.2.2_r1.2中捕获RuntimeException的统计信息。 有249个RuntimeException捕获,以下是catch-body的统计信息。 42%: throw it again as other Exceptions (RuntimeException: 33%, others: 8%) 32%: just return null or 0/false/true or other default values 14%: just call log or printstacktrace 5%: just comment like “// Fall through.”, “// ignore, not a valid type.”, “// […]

如何通过Java中的套接字发送文件列表

我在这里使用代码通过套接字发送单个文件。 但是,我需要能够通过套接字发送多个文件(基本上是目录中的所有文件),并让客户端识别文件之间的分离方式。 坦率地说,我完全不知道该做什么。 任何提示都会有所帮助。 注1:我需要一种方法来在一个连续的流中发送文件,客户端可以将这些文件分离成单个文件。 它不能依赖客户的个别请求。 注2:要回答一个问题,我很确定我会在评论中写到,不,这不是作业。 编辑有人建议我可以在文件本身之前发送文件的大小。 我怎么能这样做,因为通过套接字发送文件总是以预定的字节数组或单个字节完成,而不是由File.length()返回的long。

鼠标移动时java绘制线条

我想在我的应用程序中添加一个function,允许用户通过在起始位置单击鼠标并在结束位置释放它来绘制直线。 当鼠标移动直到它最终被释放时,线应该移动; 类似于使用Microsoft Paint应用程序绘制线条的方式。 如何实现这一点,以便线条在移动时重新绘制,而不重新绘制可能已在该矩形区域中绘制的其他内容?

持久化java对象最简单的方法是什么?

现在我有java程序,其类目前是POJO并存储在易失性存储器中。 这些都需要坚持下去。 据我所知,两个流行的选择是JDO和Java Persistence API。 对于那些对SQL,Torque等知之甚少的人来说,这是为程序数据添加持久性的最简单方法吗?

参数化selenium测试与TestNG并行

首先,对不起我的英语,它不是那么完美:) 所以我面临以下问题:我正在尝试使用Selenium Grid和TestNg在不同的浏览器中运行并行测试,并且我在@BeforeTest方法中传递参数。 我的问题是,当每个测试都被初始化时,似乎他们将使用最后一个测试的参数。 因此,在此示例中,当我运行测试时,它将打开两个Chrome,而不是一个Firefox和一个Chrome。 (browser.getDriver()方法返回一个RemoteWebDriver) testng.xml文件: AbstractTest类: public class SeleniumTest { private static List webDriverPool = Collections.synchronizedList(new ArrayList()); private static ThreadLocal driverThread; public static BrowserSetup browser; @Parameters({ “browserName”, “browserVersion”, “platform”}) @BeforeTest() public static void beforeTest(String browserName, @Optional(“none”) String browserVersion, String platform) throws WrongBrowserException, WrongPlatformException { final BrowserSetup browser = new BrowserSetup(browserName, browserVersion, platform); driverThread […]