我有一个程序,运行在几个线程中.主线程与其他线程共享一个对象,在main中我有一个调用:
synchronized(obj){
do stuff
}
Run Code Online (Sandbox Code Playgroud)
我怀疑主线程是饿死的,无法访问obj.如何提高主线程的优先级或默认情况下它是否已高于其他线程?
我经常搜索,但找不到解决问题的方法.
我有自己的类,BaseTask使用a ThreadPoolExecutor来处理任务.
如果我不想要优先级(即使用a PriorityBlockingQueue),这可以正常工作,但当我尝试使用ClassCastException我得到的ThreadPoolExecutor因为FutureTask将我的任务包装到一个FutureTask对象中.
这显然是可以的,因为Comparable它没有实现newTaskFor(),但我将如何继续解决优先级问题?
我读过您可以覆盖ThreadPoolExecutor在BaseTask,但我似乎无法在所有发现这个方法...?
我们欢迎所有的建议!
一些代码可以帮助:
在我的BaseFutureTask班上,我有
private static final BlockingQueue<Runnable> sWorkQueue = new PriorityBlockingQueue<Runnable>();
private static final ThreadFactory sThreadFactory = new ThreadFactory() {
private final AtomicInteger mCount = new AtomicInteger(1);
public Thread newThread(Runnable r) {
return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
}
};
private static final BaseThreadPoolExecutor sExecutor = new BaseThreadPoolExecutor(
1, Integer.MAX_VALUE, …Run Code Online (Sandbox Code Playgroud) 我真的很好奇JVM如何与线程一起工作!在我的互联网搜索中,我找到了一些关于RTSJ的资料,但我不知道这是否是我答案的正确方向.我还在sun的论坛http://forums.sun.com/thread.jspa?forumID=513&threadID=472453中找到了这个主题 ,但这并不令人满意.
有人可以给我一些关于JVM调度算法的指示,材料,文章或建议吗?
我也在寻找有关调度程序中Java线程的默认配置的信息,例如"时间切片时每个线程需要多长时间".而这个东西.
我将不胜感激任何帮助 !
谢谢 !