Note that there are some explanatory texts on larger screens.

plurals
  1. POWhy doesn't this thread example work? It all wait()'s
    primarykey
    data
    text
    <p>The code below is to emulate a robotics simulator I'm working with. I'm not entirely sure why this doesn't work - I'm not very familiar with threads and even though I've tried reading plenty today, I don't seem to be making progress. The problem is that once pauseDistanceSensor() is called, it never wakes up.</p> <pre><code>import java.util.Random; public class TestThreads { private DistanceSensor dist; private Thread distanceThread; public TestThreads() { this.dist = new DistanceSensor(); this.distanceThread = new Thread(this.dist); this.distanceThread.start(); } public int getDistance() { return this.dist.getMeasurement(); } public void pauseDistanceSensor() { synchronized(this.dist) { try { this.dist.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void resumeDistanceSensor() { synchronized(this.dist) { this.dist.notify(); } } public static void main(String[] args) { TestThreads test = new TestThreads(); long timestamp = System.currentTimeMillis(); System.out.println("Starting at "+timestamp); System.out.println("1: "+test.getDistance()); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("2: "+test.getDistance()); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("waiting distance sensor and making 3 getDistance calls then sleeping main thread for 1 second - all 3 getDistance calls should be printed when the sleep ends"); test.pauseDistanceSensor(); System.out.println("3: "+test.getDistance()); System.out.println("4: "+test.getDistance()); System.out.println("5: "+test.getDistance()); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("Alive! Notifying the thread"); test.resumeDistanceSensor(); System.out.println("Done at "+System.currentTimeMillis()); } } class DistanceSensor implements Runnable { private final Random gen = new Random(54); private int currentVal; public DistanceSensor() { this.currentVal = this.gen.nextInt(1500); } public void run() { this.currentVal = this.gen.nextInt(1500); } public int getMeasurement() { return this.currentVal; } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload