annotate core/src/luan/modules/ThreadLuan.java @ 582:31926755689e

add Thread.synchronized
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 31 Jul 2015 06:20:17 -0600
parents 6cc2f047019b
children cdc70de628b5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
167
4c0131c2b650 merge luan/lib into modules
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 142
diff changeset
1 package luan.modules;
126
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
2
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
3 import java.util.concurrent.Executor;
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
4 import java.util.concurrent.Executors;
221
ec016471c6eb make LuanTable an interface
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 171
diff changeset
5 import luan.Luan;
126
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
6 import luan.LuanState;
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
7 import luan.LuanFunction;
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
8 import luan.LuanTable;
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
9 import luan.LuanException;
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
10 import luan.DeepCloner;
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
11
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
12
168
ebe9db183eb7 rename *Lib.java to *Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 167
diff changeset
13 public final class ThreadLuan {
126
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
14 private static final Executor exec = Executors.newCachedThreadPool();
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
15
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
16 public static void fork(LuanState luan,LuanFunction fn,Object... args) {
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
17 DeepCloner cloner = new DeepCloner();
433
c6bcb8859b93 make LuanState.registry a Map;
Franklin Schmidt <fschmidt@gmail.com>
parents: 301
diff changeset
18 final LuanState newLuan = (LuanState)cloner.deepClone(luan);
c6bcb8859b93 make LuanState.registry a Map;
Franklin Schmidt <fschmidt@gmail.com>
parents: 301
diff changeset
19 final LuanFunction newFn = (LuanFunction)cloner.get(fn);
126
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
20 final Object[] newArgs = cloner.deepClone(args);
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
21 exec.execute(new Runnable(){public void run() {
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
22 try {
574
6cc2f047019b remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents: 433
diff changeset
23 newFn.call(newLuan,newArgs);
126
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
24 } catch(LuanException e) {
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
25 e.printStackTrace();
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
26 }
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
27 }});
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
28 }
582
31926755689e add Thread.synchronized
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
29
31926755689e add Thread.synchronized
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
30 public static LuanFunction synchronized_(final LuanState luan,final LuanFunction fn) throws LuanException {
31926755689e add Thread.synchronized
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
31 Utils.checkNotNull(luan,fn);
31926755689e add Thread.synchronized
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
32 return new LuanFunction() {
31926755689e add Thread.synchronized
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
33 @Override public Object call(LuanState ingored,Object[] args) throws LuanException {
31926755689e add Thread.synchronized
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
34 synchronized(luan) {
31926755689e add Thread.synchronized
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
35 return fn.call(luan,args);
31926755689e add Thread.synchronized
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
36 }
31926755689e add Thread.synchronized
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
37 }
31926755689e add Thread.synchronized
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
38 };
31926755689e add Thread.synchronized
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
39 }
31926755689e add Thread.synchronized
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
40
126
0149bdf98fd8 add ThreadLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
41 }