Tag: 等待

线程中断:是否会取消即将到来的wait()调用?

我有一个具有传入作业队列的线程(包含作业描述的LinkedList )。 当没有工作要做时,线程在队列上阻塞wait() 。 外部作业调度程序对象在将新作业放入队列时使用notify()唤醒它。 在关闭我的程序时,我调用Thread上的interrupt() 。 当线程等待wait()作业时,这会引发InterruptedException 。 我的问题是:如果我在没有阻塞但是做某种工作的情况下中断线程会发生什么,处理后的项目是队列中的最后一个(所以队列现在是空的)并且执行在中断之前超过了isInterrupted()检查标志是否已设置,因此它再次调用wait() ? 是否会抛出InterruptedException因为已经设置了中断标志或者线程永远等待,因为新的作业永远不会到达队列并且没有人可以中断等待?

Thread.sleep()实现

今天我接受了一次采访,我向候选人询问了关于Thread.sleep()和Object.wait()之间区别的常见和基本问题。 我希望他回答类似这样的事情 ,但他说这些方法基本上都是一样的,而且很可能Thread.sleep在其中使用了Object.wait() ,但是sleep本身不需要外部锁定。 这不是一个正确的答案,因为在JDK 1.6中,此方法具有以下签名。 public static native void sleep(long millis) throws InterruptedException; 但我的第二个想法是,这不是那么荒谬。 可以使用定时等待来实现相同的效果。 看一下下面的代码片段: public class Thread implements Runnable { private final Object sleepLock = new Object(); // other implementation details are skipped public static void sleep(long millis) throws InterruptedException { synchronized (getCurrentThread().sleepLock){ getCurrentThread().sleepLock.wait(millis); } } 在这种情况下, sleepLock是一个特别用于sleep方法内的同步块的对象。 我假设Sun / Oracle工程师知道Occam的剃刀,所以sleep本身就是故意实现的,所以我的问题是为什么它使用本机调用。 我想出的唯一想法是假设有人可能会找到像Thread.sleep(0)这样有用的调用。 […]

Java等待函数

我想知道你们是否可以帮助我。 我正在尝试使用Java内置的图形模块制作动画程序……事实上,Java会立即执行所有操作; 不同的动画之间没有任何时间。 最终产品只是最后一张图。 我需要一个在每张图片之间放置半秒钟的function。 任何帮助表示赞赏。 规格:Blue-J,JDK 6。 编辑:顺便说一下,我是一个Java新手,这是一个类的东西。 任务是制作一个动画,并按’c’前进每一帧,但我认为这有点贫民窟,所以我想要更好的东西。

等待函数完成执行并使用结​​果

这是场景 我有一个活动(A),它有一个按钮和textview。 我有另一个类(B),其中包含执行各种function的方法。 在创建B类实例后,单击该按钮时会从A调用其中一个公共方法。 该方法需要一段时间才能执行(它在类中调用另一个耗时的私有方法)并返回B类私有成员之一的值。 问题是该方法返回成员的初始值而不是计算后的值。 有没有办法强制函数等待一段时间并返回计算成员的值? public String getItem(){ startFunction(); //Time consuming Function generateItem(); //Function which uses results of startFunction() to generate item and set values to mItem return mItem; //mItem is the private member of class B } 返回的值始终是mItem的默认值,即构造函数中设置的值。 startFunction(WiFi扫描)所花费的时间是任意的。 任何帮助将非常感激。

线程同步 – 如何交替执行线程

我一直在尝试使用wait()和notify()来解决涉及线程通信的问题。 基本上我有2个线程T1和T2,我希望它们按以下顺序执行 T1,T2,T1,T2 ……我怎样才能做到这一点? 实际问题:有2个线程T1 – 打印奇数(比如1 – 100)和T2 – 打印偶数(1 – 100)。 现在,输出应该是1,2,3,4,5 …… 100

Wait()和Notify()概念 – Javamultithreading

class Q { volatile boolean valueSet = false; volatile int n; synchronized int get () { if ( !valueSet ) { try { wait(); } catch ( InterruptedException e ) { System.out.println( “InterruptedException caught” ); } } System.out.println( “Got: ” + n ); valueSet = false; notify(); return n; } synchronized void put ( int […]

wait / notify和wait / interrupt有什么区别?

synchronized (Foo.class) { while (someCondition) { try { Foo.class.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } 看来这个线程在其他线程调用此线程上的interrupt()或notify()时都会唤醒。 这两者有什么不同吗? – 编辑 – 我知道一个用于通知一个对象,另一个用于中断一个线程。 但是这两者都导致了相同的结果,也就是说,这个线程被唤醒了,所以我想问的是这两种情况的后果是如何相互不同的。

java:wait(),notify()和synchronized块

我了解到调用Object的wait()方法将释放对象监视器(如果存在)。 但是我有一些关于通过另一个线程调用此对象的notify()问题: 如果另一个(第3个)线程同时拥有对象监视器,那么等待线程是否会被唤醒? 如果第三个线程在这个对象上调用wait() ,那么等待线程会被唤醒吗? 是否可以确定线程是否在等待通知特定对象(java 1.4 / java 5) 如果在finalize()方法中调用wait()会发生什么?

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

线程可以使用Object.wait()来阻塞,直到另一个线程调用该对象上的notify()或notifyAll() 。 但是如果一个线程想要等到多个对象中的一个被发出信号呢? 例如,我的线程必须等到a)字节可用于从InputStream读取或b)将项添加到ArrayList 。 线程如何等待这些事件发生? 编辑 这个问题涉及等待多个线程完成 – 我的情况涉及一个线程等待许多对象中的一个被单独化。

Java:线程在对象上等待时是否释放所有监视器?

在线程可以wait对象之前,它必须获取该对象上的监视器。 然后释放监视器,一旦唤醒,线程就会尝试重新获取它。 但是当线程调用wait时,线程保持的其他监视器会发生什么? 考虑这个例子: 对象a = // … 对象b = // … 同步(a)中 { 同步的(b)中 { b.wait(); //继续 } } 当线程调用b.wait() ,它会释放a和b上的锁,还是只释放b ?