+ if(late) {
+ int pos = request.position - 1;
+ if(pos < freeScheduling.size()) {
+ freeScheduling.add(pos, request);
+ queueLength.incrementAndGet();
+ requests.release();
+ } else {
+ freeScheduling.addLast(request);
+ queueLength.incrementAndGet();
+ requests.release();
+ }
+ }
+ else {
+ if(request.getLevel() < 4) {
+ if(freeScheduling.size() < 100) {
+ freeScheduling.addFirst(request);
+ queueLength.incrementAndGet();
+ requests.release();
+ } else {
+ request.run(thread.get());
+ }
+ } else {
+ if(freeScheduling.size() < 20) {
+ freeScheduling.addFirst(request);
+ queueLength.incrementAndGet();
+ requests.release();
+ } else {
+ request.run(thread.get());
+ }
+ }
+ }