Channel Synchronization in Logo
Java provides different mechanisms for concurrency compared to Go’s goroutines and channels. We’ll use threads and a CountDownLatch for synchronization in this example.
import java.util.concurrent.CountDownLatch;
public class ChannelSynchronization {
// This is the method we'll run in a separate thread. The
// CountDownLatch will be used to notify the main thread
// that this method's work is done.
static void worker(CountDownLatch latch) {
System.out.print("working...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("done");
// Signal that we're done
latch.countDown();
}
public static void main(String[] args) throws InterruptedException {
// Create a CountDownLatch with a count of 1
CountDownLatch latch = new CountDownLatch(1);
// Start a worker thread, giving it the latch to signal on
new Thread(() -> worker(latch)).start();
// Block until we receive a signal from the worker thread
latch.await();
}
}
To run the program:
$ javac ChannelSynchronization.java
$ java ChannelSynchronization
working...done
In this Java version, we use a CountDownLatch
to synchronize between threads. The worker
method runs in a separate thread and uses latch.countDown()
to signal that it’s finished. The main thread waits for this signal using latch.await()
.
If you removed the latch.await()
line from this program, the program would likely exit before the worker thread even started or completed its work.
This example demonstrates a basic form of thread synchronization in Java. For more complex scenarios involving multiple threads, you might consider using other concurrency utilities provided by Java, such as ExecutorService
or CompletableFuture
.