标签: notify

在java中使用wait()和notify()的简单方案

我是否可以获得一个完整的简单场景,即教程,建议如何使用它,特别是使用队列?

java notify wait

175
推荐指数
4
解决办法
21万
查看次数

Java执行程序:如何在任务完成时通知而不阻塞?

假设我有一个完整的任务队列,我需要提交给执行程序服务.我希望他们一次处理一个.我能想到的最简单的方法是:

  1. 从队列中获取任务
  2. 将其提交给遗嘱执行人
  3. 在返回的Future上调用.get并阻塞,直到结果可用
  4. 从队列中取出另一项任务......

但是,我试图完全避免阻塞.如果我有10,000个这样的队列,需要一次处理一个任务,我将耗尽堆栈空间,因为它们中的大多数将保持被阻塞的线程.

我想要的是提交一个任务并提供一个在任务完成时调用的回调.我将使用该回叫通知作为发送下一个任务的标志.(functionaljava和jetlang显然使用了这种非阻塞算法,但我无法理解他们的代码)

如何使用JDK的java.util.concurrent,而不是编写自己的执行器服务?

(向我提供这些任务的队列本身可以阻止,但这是一个需要解决的问题)

java callback notify executor

139
推荐指数
7
解决办法
12万
查看次数

为什么在Java的Object类中声明了wait()和notify()?

为什么在类中声明wait()notify()方法Object而不是Thread类?

java multithreading notify wait

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

如何在非线程的对象上调用wait()和notify()方法?

如何在不是线程的对象上调用wait()notify()方法?那真的没有意义,是吗?

当然,它必须有意义,因为这两种方法可用于所有Java对象.有人可以提供解释吗?我无法理解如何使用wait()和之间的线程之间进行通信notify().

java multithreading notify wait

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

在Object类中放置wait(),notify()方法的概念

我只是很难有时间去了解背后把概念wait()Object类.为了这个问题,请考虑是否wait()notifyAll()Thread课堂上.

class Reader extends Thread {
    Calculator c;
    public Reader(Calculator calc) {
        c = calc;
    }

    public void run() {
        synchronized(c) {                              //line 9
        try {
            System.out.println("Waiting for calculation...");
            c.wait();
        } catch (InterruptedException e) {}
            System.out.println("Total is: " + c.total);
        }
    }

    public static void main(String [] args) {
        Calculator calculator = new Calculator();
        new Reader(calculator).start();
        new Reader(calculator).start();
        new Reader(calculator).start();
        calculator.start();
    }
}

class Calculator extends Thread {
    int total; …
Run Code Online (Sandbox Code Playgroud)

java multithreading notify wait

44
推荐指数
4
解决办法
9万
查看次数

为什么notifyAll()在Integer上同步时会引发IllegalMonitorStateException?

为什么这个测试程序导致了java.lang.IllegalMonitorStateException

public class test {
    static Integer foo = new Integer(1);
    public static void main(String[] args) {
        synchronized(foo) {
            foo++;
            foo.notifyAll();
        }
        System.err.println("Success");
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

Exception in thread "main" java.lang.IllegalMonitorStateException
        at java.lang.Object.notifyAll(Native Method)
        at test.main(test.java:6)
Run Code Online (Sandbox Code Playgroud)

java synchronization illegalmonitorstateexcep notify

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

执行notifyDataSetChanged时使用ListView的ClassCastException

我在listVivew的标题中添加了一个视图,

    View TopSearch =  (View) View.inflate(this, R.layout.search, null);
    lv.addHeaderView(TopSearch, null, false);
Run Code Online (Sandbox Code Playgroud)

一切都很好,直到我尝试执行(数据更改时)

adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

总是崩溃我的应用程序给我以下错误:

> java.lang.ClassCastException:android.widget.HeaderViewListAdapter

如果我删除标题视图,则没有错误.有什么建议?谢谢.

listview header dataset adapter notify

38
推荐指数
4
解决办法
1万
查看次数

如何区分等待(长时间超时)退出通知或超时?

有这个等待声明:

public final native void wait(long timeout) throws InterruptedException;
Run Code Online (Sandbox Code Playgroud)

它可以通过InterruptedException或超时退出,或者因为在另一个线程中调用Notify/NotifyAll方法,Exception很容易捕获但是...

有什么方法可以知道退出原因是超时还是通知?

编辑:

这是一种可行的方法,(虽然我不喜欢)

          long tBefore=System.currentTimeMillis();
          wait(TIMEOUT);
          if ((System.currentTimeMillis() - tBefore) > TIMEOUT) 
            { 
               //timeout
            }
Run Code Online (Sandbox Code Playgroud)

java multithreading synchronized notify wait

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

为什么所有Java对象都有wait()和notify(),这是否会导致性能下降?

每个Java Object都有方法wait()notify()(以及其他变体).我从来没有使用过这些,我怀疑很多其他人都没有.为什么这些如此基本以至于每个对象都必须拥有它们并且在使用它们时是否会有性能损失(可能是某些状态存储在它们中)?

编辑以强调这个问题.如果我有List<Double>100,000个元素,那么每个Double都有这些方法,因为它是扩展的Object.但似乎所有这些都不太可能知道管理它的线程List.

编辑优秀而有用的答案.@Jon有一篇非常好的博文,结合了我的直觉.我也完全赞同@Bob_Cross你应该在担心之前表现出性能问题.(同样作为成功语言的第n定律,如果它是一个性能命中,那么Sun或某人会修复它).

java notify wait

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

Java:线程如何在多个对象上等待?

线程可以Object.wait()用来阻塞直到另一个线程调用notify()notifyAll()在该对象上.

但是如果一个线程想要等到多个对象中的一个被发出信号呢?例如,我的线程必须等待,直到要么 a)使用字节可用从阅读InputStream或b)项被添加到ArrayList.

线程如何等待这些事件发生?

编辑

这个问题涉及等待多个线程完成 - 我的情况涉及一个线程等待许多对象中的一个被单独化.

java multithreading notify wait

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