import co.paralleluniverse.fibers.Fiber;
import co.paralleluniverse.fibers.SuspendExecution;
import co.paralleluniverse.strands.SuspendableCallable;
import co.paralleluniverse.strands.SuspendableRunnable;
import co.paralleluniverse.strands.channels.Channels;
import co.paralleluniverse.strands.channels.IntChannel;
/**
* HelloWorld using Fiber and Channel
*
* To run using "maven test"
*
* Created by vvedenin on 4/11/2016.
*/
public class FibersAndChanelHelloWorld {
public static Integer doTest() throws Exception {
final IntChannel fiber1ToFiber2 = Channels.newIntChannel(0); // Synchronizing channel (buffer = 0)
final IntChannel fiber2ToFiber1 = Channels.newIntChannel(0); // Synchronizing channel (buffer = 0)
Fiber<Integer> fiber1 = new Fiber<>("Fiber1", new SuspendableCallable<Integer>() {
@Override
public Integer run() throws SuspendExecution, InterruptedException {
Fiber.sleep(1000);
fiber1ToFiber2.send(1);
Integer i1 = fiber2ToFiber1.receive();
System.out.println(" Hello words " + i1);
fiber1ToFiber2.send(9);
Integer i2 = fiber2ToFiber1.receive();
System.out.println(" Hello words " + i2);
fiber1ToFiber2.send(0);
return i2;
}
}).start();
Fiber<Void> fiber2 = new Fiber<Void>("Fiber2", new SuspendableRunnable() { @Override public void run() throws SuspendExecution, InterruptedException {
Integer i;
i = fiber1ToFiber2.receive();
while(i != 0) {
fiber2ToFiber1.send(i + 1);
i = fiber1ToFiber2.receive();
}
} }).start();
fiber1.join();
fiber2.join();
return fiber1.get();
}
}