这是JavaDoc关于的一段话ConcurrentHashMap
.它说检索操作通常不会阻塞,因此可能与更新操作重叠.这是否意味着该get()
方法不是线程安全的?
"但是,即使所有操作都是线程安全的,检索操作也不需要锁定,并且没有任何支持以阻止所有访问的方式锁定整个表.这个类可以在依赖于的程序中与Hashtable完全互操作.它的线程安全,但不是它的同步细节.
检索操作(包括get)通常不会阻塞,因此可能与更新操作(包括put和remove)重叠.检索反映了最近完成的更新操作的结果."
遍历功能HashMap
和LinkedHashMap
遍历values()
功能之间是否存在性能差异?
我知道System.nanoTime()
现在是测量时间的首选方法System.currentTimeInMillis()
.第一个明显的原因是nanoTime()提供更精确的时序,另一个原因是我读到后者受到系统实时时钟调整的影响."受系统实时时钟影响"是什么意思?
如果你有一个枚举如
enum Coffee {
BIG,
SMALL
}
Run Code Online (Sandbox Code Playgroud)
和一个像枚举这样的实例变量的类:
public class MyClass {
private Coffee coffee;
// Constructor etc.
}
Run Code Online (Sandbox Code Playgroud)
为什么在构造函数中可以说例如coffee.BIG
?我不明白你可以使用参考?枚举是否将实例变量初始化为其他内容null
?这是第一章SCJP书中的自测题#4.我试图缩短代码和问题.
我最近下载了Eclipse Juno并安装了最新的Groovy插件.
现在这是我的Groovy文件的样子.
package groovy_support
class TimePass {
static void main(def args){
println "Hello World"
}
}
Run Code Online (Sandbox Code Playgroud)
当我从我之前的eclipse版本(indigo)或命令行运行它时,它会运行.然而,在Eclipse Juno上,它抱怨Eclipse控制台上出现以下异常.
Caught: java.lang.IncompatibleClassChangeError: Found class org.objectweb.asm.ClassVisitor, but interface was expected
java.lang.IncompatibleClassChangeError: Found class org.objectweb.asm.ClassVisitor, but interface was expected
Run Code Online (Sandbox Code Playgroud)
请注意,"Groovy库"已经在类路径中.
那我在这里做错了什么?
在我的Ubuntu上,我运行了一个java可执行文件,其中包含一些我在代码中没有明确使用的包的错误.可能是什么解决方案?谢谢.
$ java -cp .:/home/tim/program_files/programming/java/junit-4.11.jar MyTest
Exception in thread "main" java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.junit.runner.Computer.getSuite(Computer.java:28)
at org.junit.runner.Request.classes(Request.java:75)
at org.junit.runner.JUnitCore.run(JUnitCore.java:128)
at org.junit.runner.JUnitCore.runClasses(JUnitCore.java:73)
at MyTest.main(MyTest.java:13)
Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 17 more
Run Code Online (Sandbox Code Playgroud) 我可以看到jconsole上的一些方法被禁用了.
以下是截图 com.sun.management.ThreadMXBean
这些MBean方法的javadoc没有指定有关可访问性部分的任何内容.
我认为这是一个安全功能,但我无法得到一个具体的答案.
这个问题的第二部分显而易见的是如何创建可以在jconsole上有选择地禁用的自定义MBean实现.
以下是系统配置:
JConsole版本"1.7.0-b147"
Java(TM)SE运行时环境(版本1.7.0-b147)
Java HotSpot(TM)64位服务器VM(内置21.0-b17,混合模式)
编辑:
禁用的方法可以从独立进程中调用.
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ObjectName name = new ObjectName("java.lang", "type", "Threading");
String operationName = "getThreadAllocatedBytes";
//1 is main thread
Object[] params = {1};
String[] signature = new String[]{"long"};
Object result = server.invoke(name, operationName, params, signature);
//Result is 682760 on my machine
System.out.println(result);
Run Code Online (Sandbox Code Playgroud) 每个方法的注释public static ExecutorService newCachedThreadPool()
中的Executor
类:
Threads that have not been used for sixty seconds are terminated and
removed from the **cache**.
Run Code Online (Sandbox Code Playgroud)
我想知道缓存在哪里以及它是如何工作的?因为我Collection
在ThreadPoolExecutor
或者它的超类中没有看到任何可能的静态变量。
我试图对呼叫进行一些分析start
,join
同时,
//Starting and Joining
for (Thread thread : threadArray) {
thread.start();
thread.join();
}
Run Code Online (Sandbox Code Playgroud)
与start
第一次相比join
.
//Starting Them
for (Thread thread : threadArray) {
thread.start();
}
//Joining Them
for (Thread thread : threadArray) {
thread.join();
}
Run Code Online (Sandbox Code Playgroud)
上述两种情况之间的性能差异是什么?
在第一个场景中,我几乎可以保证线程之间的执行顺序是顺序的.因此,如果我有n
线程并说每个线程需要Ti
时间来完成任务,那么我的总执行时间应该是Tis
从1到n的总和.
在第二种情况下,我开始然后加入.这是我感到困惑的部分.难道时间不应该与上面几乎相同吗?我所看到的几乎是我机器的两倍.
我正在使用的整个代码示例如下所示.
public class ThreadJoin implements Runnable {
public void run() {
for (int i=0;i<10000000;i++) {
//Random mathematical stuff independent of i.
int ran = (int) (Math.random()*1000 -34)%47;
}
} …
Run Code Online (Sandbox Code Playgroud) 我看到一个奇怪的java.lang.OutOfMemoryError错误(下面的部分堆栈跟踪).问题是java进程不会崩溃.我在日志中看到这个错误,但过程似乎停止但不退出.
谢谢.
Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:691)
at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:943)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1325)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:132)
at com.amazonaws.services.s3.transfer.internal.UploadMonitor.<init>(UploadMonitor.java:126)
at com.amazonaws.services.s3.transfer.TransferManager.upload(TransferManager.java:384)
at com.amazonaws.services.s3.transfer.TransferManager.upload(TransferManager.java:344)
at com.amazonaws.services.s3.transfer.TransferManager.upload(TransferManager.java:272)
Run Code Online (Sandbox Code Playgroud) 我正在阅读一本java书,其中说当访问/修改不同类中的变量时,应该使用get/set方法来操作它们.
我的问题是,加班和使用获取/设置的大型项目不会危及应用程序性能?
类似的问题,通常我们应该优先使用数组而不利于更抽象的数据类型(比如实例的类似列表),因为数组通常更加缓存友好.
class A {}
interface Wtf{}
A a = new A();
Wtf wtf = (Wtf)a;
Run Code Online (Sandbox Code Playgroud)
是什么原因,为什么编译得很好?也在C#:D
java ×11
collections ×1
eclipse ×1
eclipse-juno ×1
enums ×1
groovy ×1
hashmap ×1
jconsole ×1
jmx ×1
junit ×1
mbeans ×1
performance ×1
scjp ×1
synchronized ×1