diff --git a/src/main/java/org/syndicate_lang/actors/Actor.java b/src/main/java/org/syndicate_lang/actors/Actor.java index 6fd7dbd..8a55060 100644 --- a/src/main/java/org/syndicate_lang/actors/Actor.java +++ b/src/main/java/org/syndicate_lang/actors/Actor.java @@ -96,9 +96,8 @@ public class Actor { return _alive && !_isCounted; } - public synchronized Actor daemonize() { - this._releaseCount(); - return this; + public void daemonize() { + this.scheduleTurn(_t -> this._releaseCount()); } private void _releaseCount() { @@ -138,8 +137,9 @@ public class Actor { return new Ref(this, o); } - public void scheduleTurn(Consumer f) { + public Actor scheduleTurn(Consumer f) { this.execute(new WorkItem(f, null)); + return this; } void _performTurn(Consumer f) { diff --git a/src/test/java/org/syndicate_lang/actors/example/example1/Main.java b/src/test/java/org/syndicate_lang/actors/example/example1/Main.java index 650b6fb..e815355 100644 --- a/src/test/java/org/syndicate_lang/actors/example/example1/Main.java +++ b/src/test/java/org/syndicate_lang/actors/example/example1/Main.java @@ -8,7 +8,7 @@ import org.syndicate_lang.actors.Turn; public class Main extends Entity { public static void main(String[] args) throws InterruptedException { Actor.convenientLogging(); - new Actor().daemonize().scheduleTurn(t -> { + new Actor().scheduleTurn(t -> { final var vh = Actor.forEntity(new ValueHolder<>("There")); vh.getActor().daemonize(); final var m = Actor.boot(u -> { @@ -29,7 +29,7 @@ public class Main extends Entity { }))); } }))); - }); + }).daemonize(); Actor.awaitAll(); System.out.println("Overall main returning"); diff --git a/src/test/java/org/syndicate_lang/actors/example/example2/Main.java b/src/test/java/org/syndicate_lang/actors/example/example2/Main.java index d7fa77f..a67435f 100644 --- a/src/test/java/org/syndicate_lang/actors/example/example2/Main.java +++ b/src/test/java/org/syndicate_lang/actors/example/example2/Main.java @@ -13,7 +13,9 @@ import static java.lang.Integer.parseInt; public class Main extends Entity { public static void main(String[] args) throws InterruptedException { Actor.convenientLogging(); - new Actor().daemonize().scheduleTurn(t -> new Main(parseInt(args[0]), parseInt(args[1])).boot(t)); + new Actor() + .scheduleTurn(t -> new Main(parseInt(args[0]), parseInt(args[1])).boot(t)) + .daemonize(); Actor.awaitAll(); }