小编Aja*_*rge的帖子

ConcurrentHashMap完全安全吗?

这是JavaDoc关于的一段话ConcurrentHashMap.它说检索操作通常不会阻塞,因此可能与更新操作重叠.这是否意味着该get()方法不是线程安全的?

"但是,即使所有操作都是线程安全的,检索操作也不需要锁定,并且没有任何支持以阻止所有访问的方式锁定整个表.这个类可以在依赖于的程序中与Hashtable完全互操作.它的线程安全,但不是它的同步细节.

检索操作(包括get)通常不会阻塞,因此可能与更新操作(包括put和remove)重叠.检索反映了最近完成的更新操作的结果."

java multithreading synchronized java.util.concurrent

48
推荐指数
5
解决办法
5万
查看次数

HashMap与LinkedHashMap在值迭代中的性能()

遍历功能HashMapLinkedHashMap遍历values()功能之间是否存在性能差异?

java collections hashmap linkedhashmap

27
推荐指数
3
解决办法
3万
查看次数

System.currenTimeInMillis()vs System.nanoTime()

我知道System.nanoTime()现在是测量时间的首选方法System.currentTimeInMillis() .第一个明显的原因是nanoTime()提供更精确的时序,另一个原因是我读到后者受到系统实时时钟调整的影响."受系统实时时钟影响"是什么意思?

java

23
推荐指数
3
解决办法
3891
查看次数

枚举作为实例变量

如果你有一个枚举如

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.我试图缩短代码和问题.

java enums scjp

19
推荐指数
3
解决办法
4万
查看次数

在Eclipse Juno中运行Groovy时出现异常java.lang.IncompatibleClassChangeError

我最近下载了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库"已经在类路径中.

那我在这里做错了什么?

eclipse groovy eclipse-juno

15
推荐指数
1
解决办法
2万
查看次数

"线程中的异常"主"java.lang.NoClassDefFoundError:org/hamcrest/SelfDescribing"

在我的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)

java junit

9
推荐指数
1
解决办法
2万
查看次数

为什么JConsole上的某些方法被禁用

我可以看到jconsole上的一些方法被禁用了.

以下是截图 com.sun.management.ThreadMXBean

jconsole截图

这些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)

java jmx mbeans jconsole

8
推荐指数
1
解决办法
2996
查看次数

newCachedThreadPool 如何缓存线程

每个方法的注释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)

我想知道缓存在哪里以及它是如何工作的?因为我CollectionThreadPoolExecutor或者它的超类中没有看到任何可能的静态变量。

java multithreading executorservice java.util.concurrent

3
推荐指数
1
解决办法
1573
查看次数

为什么我的并发程序比顺序版慢?

我试图对呼叫进行一些分析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 multithreading

2
推荐指数
2
解决办法
1967
查看次数

奇怪的java.lang.OutOfMemoryError - 进程不会崩溃

我看到一个奇怪的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 out-of-memory

2
推荐指数
1
解决办法
1309
查看次数

我们应该使用收集,获取和设置吗?

我正在阅读一本java书,其中说当访问/修改不同类中的变量时,应该使用get/set方法来操作它们.

我的问题是,加班和使用获取/设置的大型项目不会危及应用程序性能?

类似的问题,通常我们应该优先使用数组而不利于更抽象的数据类型(比如实例的类似列表),因为数组通常更加缓存友好.

java performance getter-setter

1
推荐指数
1
解决办法
152
查看次数

为什么可以将任何对象转换为任何接口?

class A {}
interface Wtf{}


A a = new A();
Wtf wtf = (Wtf)a;
Run Code Online (Sandbox Code Playgroud)

是什么原因,为什么编译得很好?也在C#:D

java

-1
推荐指数
2
解决办法
109
查看次数