view src/alice/codesegment/CodeSegmentManager.java @ 58:ebdcab7b9b04

add comment
author one
date Wed, 08 Feb 2012 17:06:39 +0900
parents 7fa9ddb31f64
children a76e603c43a0
line wrap: on
line source

package alice.codesegment;

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import org.apache.log4j.Logger;

public class CodeSegmentManager {

	private static CodeSegmentManager instance = new CodeSegmentManager();
	public LinkedBlockingQueue<CodeSegment> readyQueue = new LinkedBlockingQueue<CodeSegment>();
	ThreadPoolExecutor codeSegmentExecutor = new ThreadPoolExecutor(1, // initial number of threads
												Runtime.getRuntime().availableProcessors(),
												Integer.MAX_VALUE, // keepAliveTime
												TimeUnit.SECONDS,
												new LinkedBlockingQueue<Runnable>());
	private Logger log = Logger.getLogger(CodeSegmentManager.class);
	
	private CodeSegmentManager() {
		Runnable prepareThread = new Runnable() {

			@Override
			public void run() {
				while (true) {
					try {
						CodeSegment cs = readyQueue.take();
						codeSegmentExecutor.execute(cs);
						log.debug(cs.getClass().getName());
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
			
		};
		new Thread(prepareThread, "CodeSegmentManager").start();
	}
	
	public void create(CodeSegment cs) {
	}
	
	public static CodeSegmentManager get() {
		return instance;
	}

	public static void submit(CodeSegment cs) {
		try {
			CodeSegmentManager.get().readyQueue.put(cs);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
}