小编ges*_*nri的帖子

为什么引用不会在finalize方法覆盖时放入引用队列

public class Test {
    public static void main(String[] args) throws Exception {
        A aObject = new A();

        ReferenceQueue<A> queue = new ReferenceQueue<>();
        PhantomReference<A> weak = new PhantomReference<>(aObject, queue);

        aObject = null;
        System.gc();

        TimeUnit.SECONDS.sleep(1);

        System.out.println(queue.poll());
    }
}

class A{
    @Override
    protected void finalize() throws Throwable {
        // TODO Auto-generated method stub
        super.finalize();

        System.out.println("finalize");
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是:

finalize
null
Run Code Online (Sandbox Code Playgroud)

但如果我删除A类中的finalize方法,结果是:

java.lang.ref.PhantomReference@5b2c9e5d
Run Code Online (Sandbox Code Playgroud)

所以,结果显示当我覆盖finalize方法时,弱对象没有被放入引用队列,那是因为aObject复活了吗?但我在finalize方法中没有做任何事情

java reference finalize

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

为什么我的 Disruptor 程序没有充分利用环形缓冲区

Disruptor github地址为:https://github.com/LMAX-Exchange/disruptor

我对其进行了一个简单的测试,如下所示:

public class DisruptorMain {
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static void main(String[] args) throws Exception {
        class Element {

            private int value;

            public int get() {
                return value;
            }

            public void set(int value) {
                this.value = value;
            }

        }

        ThreadFactory threadFactory = new ThreadFactory() {
            @Override
            public Thread newThread(Runnable r) {
                return new Thread(r, "simpleThread");
            }
        };

        EventFactory<Element> factory = new EventFactory<Element>() {
            @Override
            public Element newInstance() {
                return new Element();
            }
        };

        EventHandler<Element> handler = …
Run Code Online (Sandbox Code Playgroud)

java producer-consumer disruptor-pattern

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

如何在windows的android studio中执行gradle wrapper/gradlew命令

我在 android studio 中将 gradle 与 android 项目一起使用,我想gradlew在 android studio 的终端中运行命令,而我收到 gradlew command not found 错误。

我的 gradle 包装器在目录中:

"C:\Users\Administrator\.gradle\wrapper\dists\gradle-4.1-all\bzyivzo6n839fup2jbap0tjew\gradle-4.1\bin"

在这个目录中,有以下内容:

  1. 名为 .gradle 的目录
  2. 名为 gradle 的文件
  3. 名为 gradle.bat 的文件。

我试过"gradle -v" 在这个目录中运行 ,它工作正常。

但是当我试图跑

gradle wrapper --gradle-version 4.1
Run Code Online (Sandbox Code Playgroud)

我有错误?

“在任务':wrapper'的配置中发现了一些问题。无法写入文件'C:\Users\Administrator.gradle\wrapper\dists\gradle-4.1-all\bzyivzo6n839fup2jbap0tjew\gradle-4.1\bin\gradle\wrapper \gradle-wrapper.jar' 为属性 'jarFile' 指定,作为祖先 'C:\Use rs\Administrator.gradle\wrapper\dists\gradle-4.1-all\bzyivzo6n839fup2jbap0tjew\gradle-4.1\bin\gradle' 不是一个目录。”

我的项目在目录中D:\ASWorkspace\MyApp,我很困惑如果我想执行gradlew命令,我应该在哪个目录执行它?在我的 android 项目或 gradle 项目中?以及如何正确执行它

android gradle android-studio

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

为什么在gradle中删除rootProject.buildDir任务会删除模块中的build目录

当我在android studio中创建一个新的android项目时,在项目的根目录下,build.gradle文件有一个这样的任务:

task clean(type: Delete) {
    delete rootProject.buildDir
}
Run Code Online (Sandbox Code Playgroud)

我在终端用gradlew clean命令运行任务,发现项目根目录下的build目录被删除了,模块中的build目录也被删除了,为什么?我的意思是 rootProject.buildDir 不应该在模块中包含构建目录

android gradle android-studio

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