Changeset 101 for java/main/src/main/java/com/framsticks/util
- Timestamp:
- 07/14/13 23:20:04 (11 years ago)
- Location:
- java/main/src/main/java/com/framsticks/util
- Files:
-
- 3 added
- 6 deleted
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
java/main/src/main/java/com/framsticks/util/dispatching/AbstractJoinable.java
r100 r101 39 39 synchronized (joinablesRegistry) { 40 40 for (AbstractJoinable j : joinablesRegistry) { 41 b.append("\n").append(j.getState()).append(" : ").append(j) ;41 b.append("\n").append(j.getState()).append(" : ").append(j).append(" - ").append(j.getClass()); 42 42 } 43 43 } … … 73 73 74 74 75 p ublic final boolean start() {75 protected final boolean startJoinable() { 76 76 if (changeState(JoinableState.RUNNING)) { 77 77 joinableStart(); … … 81 81 } 82 82 83 p ublic final boolean interrupt() {83 protected final boolean interruptJoinable() { 84 84 if (changeState(JoinableState.FINISHING)) { 85 85 joinableInterrupt(); … … 89 89 } 90 90 91 protected final boolean finish () {91 protected final boolean finishJoinable() { 92 92 if (changeState(JoinableState.JOINABLE)) { 93 93 joinableFinish(); … … 118 118 switch (state) { 119 119 case RUNNING: 120 return start ();120 return startJoinable(); 121 121 case FINISHING: 122 return interrupt ();122 return interruptJoinable(); 123 123 case JOINABLE: 124 return finish ();124 return finishJoinable(); 125 125 default: return false; 126 126 } … … 149 149 assert monitor == null; 150 150 monitor = owner.getMonitor(); 151 return this.start ();151 return this.startJoinable(); 152 152 } 153 153 return false; … … 170 170 @Override 171 171 protected void runAt() { 172 interrupt ();172 interruptJoinable(); 173 173 } 174 174 }); -
java/main/src/main/java/com/framsticks/util/dispatching/AtOnceDispatcher.java
r99 r101 5 5 * @author Piotr Sniegowski 6 6 */ 7 public class AtOnceDispatcher<C> extends AbstractJoinable implements JoinableDispatcher<C> {7 public class AtOnceDispatcher<C> extends AbstractJoinable implements Dispatcher<C> { 8 8 9 9 @SuppressWarnings("rawtypes") … … 37 37 @Override 38 38 protected void joinableInterrupt() { 39 finish ();39 finishJoinable(); 40 40 } 41 41 -
java/main/src/main/java/com/framsticks/util/dispatching/Dispatcher.java
r90 r101 4 4 * @author Piotr Sniegowski 5 5 */ 6 public interface Dispatcher<C> {6 public interface Dispatcher<C> extends Joinable { 7 7 public boolean isActive(); 8 8 public void dispatch(RunAt<? extends C> runnable); -
java/main/src/main/java/com/framsticks/util/dispatching/Dispatching.java
r100 r101 1 1 package com.framsticks.util.dispatching; 2 3 import java.util.Timer; 2 4 3 5 import org.apache.logging.log4j.Logger; … … 11 13 public abstract class Dispatching { 12 14 private static final Logger log = LogManager.getLogger(Dispatching.class); 15 16 protected static final Timer timer = new Timer(); 17 18 public static Timer getTimer() { 19 return timer; 20 } 13 21 14 22 public static boolean isThreadSafe() { … … 183 191 } 184 192 185 public static class DispatcherWaiter<C, T extends Dispatcher<C> & Joinable> implements Dispatcher<C> {186 // protected boolean done = false;187 protected final T dispatcher;188 protected RunAt<? extends C> runnable;189 190 /**191 * @param joinable192 */193 public DispatcherWaiter(T dispatcher) {194 this.dispatcher = dispatcher;195 }196 197 public synchronized void waitFor() {198 while ((runnable == null) && (dispatcher.getState().ordinal() <= JoinableState.RUNNING.ordinal())) {199 try {200 this.wait();201 } catch (InterruptedException e) {202 }203 }204 if (runnable != null) {205 runnable.run();206 }207 208 }209 210 @Override211 public boolean isActive() {212 return dispatcher.isActive();213 }214 215 @Override216 public synchronized void dispatch(RunAt<? extends C> runnable) {217 this.runnable = runnable;218 this.notifyAll();219 }220 221 }193 // public static class DispatcherWaiter<C, T extends Dispatcher<C> & Joinable> implements Dispatcher<C> { 194 // // protected boolean done = false; 195 // protected final T dispatcher; 196 // protected RunAt<? extends C> runnable; 197 198 // /** 199 // * @param joinable 200 // */ 201 // public DispatcherWaiter(T dispatcher) { 202 // this.dispatcher = dispatcher; 203 // } 204 205 // public synchronized void waitFor() { 206 // while ((runnable == null) && (dispatcher.getState().ordinal() <= JoinableState.RUNNING.ordinal())) { 207 // try { 208 // this.wait(); 209 // } catch (InterruptedException e) { 210 // } 211 // } 212 // if (runnable != null) { 213 // runnable.run(); 214 // } 215 216 // } 217 218 // @Override 219 // public boolean isActive() { 220 // return dispatcher.isActive(); 221 // } 222 223 // @Override 224 // public synchronized void dispatch(RunAt<? extends C> runnable) { 225 // this.runnable = runnable; 226 // this.notifyAll(); 227 // } 228 229 // } 222 230 223 231 public static class Waiter { -
java/main/src/main/java/com/framsticks/util/dispatching/JoinableCollection.java
r97 r101 8 8 import java.util.Set; 9 9 10 import com.framsticks.params.ParamFlags; 10 11 import com.framsticks.params.annotations.AutoAppendAnnotation; 11 12 import com.framsticks.params.annotations.FramsClassAnnotation; 13 import com.framsticks.params.annotations.ParamAnnotation; 12 14 import com.framsticks.util.FramsticksException; 13 15 import com.framsticks.util.Misc; … … 72 74 protected void joinableInterrupt() { 73 75 if (joinables.isEmpty()) { 74 finish ();76 finishJoinable(); 75 77 return; 76 78 } … … 137 139 public T get(String name) { 138 140 for (T j : joinables) { 139 if ( j.getName().equals(name)) {141 if (name.equals(j.getName())) { 140 142 return j; 141 143 } … … 153 155 154 156 @Override 157 @ParamAnnotation 155 158 public String getName() { 156 159 return observableName; 160 } 161 162 @ParamAnnotation(flags = ParamFlags.USERREADONLY) 163 public final void setName(String name) { 164 observableName = name; 157 165 } 158 166 … … 185 193 } 186 194 195 196 187 197 } -
java/main/src/main/java/com/framsticks/util/dispatching/Thread.java
r100 r101 3 3 import org.apache.logging.log4j.Logger; 4 4 import org.apache.logging.log4j.LogManager; 5 6 import java.util.LinkedList;7 import java.util.ListIterator;8 5 9 6 … … 14 11 * @author Piotr Sniegowski 15 12 */ 16 public class Thread<C> extends AbstractJoinable implements JoinableDispatcher<C> {13 public class Thread<C> extends AbstractJoinable implements Dispatcher<C> { 17 14 18 15 private static final Logger log = LogManager.getLogger(Thread.class); … … 20 17 protected final java.lang.Thread thread; 21 18 22 private final LinkedList<Task<? extends C>> queue = new LinkedList<>(); 19 protected final Object condition = new Object(); 20 private RunnableQueue<C> queue = new RunnableQueue<>(); 23 21 24 22 public Thread() { 25 thread = new java.lang.Thread(new java.lang.Runnable() {23 thread = new java.lang.Thread(new Runnable() { 26 24 @Override 27 25 public void run() { … … 30 28 }); 31 29 } 32 33 30 34 31 public Thread(java.lang.Thread thread) { … … 51 48 ExceptionHandler exceptionHandler = getMonitor().getTaskExceptionHandler(); 52 49 while (!java.lang.Thread.interrupted()) { 53 Task<? extends C> task;54 synchronized ( queue) {50 RunAt<? extends C> runnable; 51 synchronized (condition) { 55 52 if (queue.isEmpty()) { 56 53 try { 57 queue.wait();54 condition.wait(); 58 55 } catch (InterruptedException ignored) { 59 56 break; … … 61 58 continue; 62 59 } 63 task = queue.peekFirst(); 64 assert task != null; 65 if (task.moment > System.currentTimeMillis()) { 66 try { 67 queue.wait(task.moment - System.currentTimeMillis()); 68 } catch (InterruptedException ignored) { 69 continue; 60 runnable = queue.pollFirst(); 61 } 62 if (runnable != null) { 63 try { 64 runnable.run(); 65 } catch (Exception e) { 66 if (exceptionHandler != null) { 67 if (exceptionHandler.handle(this, e)) { 68 continue; 69 } 70 70 } 71 continue;71 log.error("error in thread: ", e); 72 72 } 73 queue.pollFirst();74 }75 try {76 task.run();77 } catch (Exception e) {78 if (exceptionHandler != null) {79 if (exceptionHandler.handle(this, e)) {80 continue;81 }82 }83 log.error("error in thread: ", e);84 73 } 85 74 } 86 75 log.debug("finishing thread {}", this); 87 finish ();76 finishJoinable(); 88 77 } 89 78 90 protected void enqueueTask(Task<? extends C> task) {91 synchronized (queue) {92 ListIterator<Task<? extends C>> i = queue.listIterator();93 while (i.hasNext()) {94 Task<? extends C> t = i.next();95 if (t.getMoment() > task.getMoment()) {96 i.previous();97 i.add(task);98 task = null;99 break;100 }101 }102 if (task != null) {103 queue.add(task);104 }105 79 106 /* 107 Iterator<Task> j = queue.iterator(); 108 Task prev = null; 109 while (j.hasNext()) { 110 Task next = j.next(); 111 assert (prev == null) || prev.getMoment() <= next.getMoment(); 112 prev = next; 113 } 114 */ 115 queue.notify(); 80 @Override 81 public void dispatch(RunAt<? extends C> runnable) { 82 synchronized (condition) { 83 queue.push(runnable); 84 condition.notifyAll(); 116 85 } 117 86 } 118 87 119 @Override 120 public void dispatch(final RunAt<? extends C> runnable) { 121 if (!(runnable instanceof Task)) { 122 enqueueTask(new Task<C>(runnable) { 123 @Override 124 protected void runAt() { 125 runnable.run(); 126 } 127 }); 128 return; 88 public RunnableQueue<C> switchQueue(RunnableQueue<C> queue) { 89 synchronized (condition) { 90 RunnableQueue<C> result = this.queue; 91 this.queue = queue; 92 return result; 129 93 } 130 enqueueTask((Task<? extends C>) runnable);131 94 } 132 95 -
java/main/src/main/java/com/framsticks/util/lang/Holder.java
r96 r101 33 33 } 34 34 35 public static <T2> Holder<T2> make(T2 value) { 36 return new Holder<T2>(value); 37 } 38 35 39 } -
java/main/src/main/java/com/framsticks/util/lang/Strings.java
r99 r101 1 1 package com.framsticks.util.lang; 2 3 import java.util.regex.Matcher; 2 4 3 5 import com.framsticks.util.FramsticksException; … … 78 80 } 79 81 82 public static CharSequence takeGroup(CharSequence input, Matcher matcher, int group) { 83 // return (matcher.start(group) == matcher.end(group)) ? null : input.subSequence(matcher.start(group), matcher.end(group)); 84 return input.subSequence(matcher.start(group), matcher.end(group)); 85 } 86 80 87 }
Note: See TracChangeset
for help on using the changeset viewer.