我正在尝试编写一个解决方案,其中单个线程生成可以并行执行的I/O密集型任务.每个任务都有重要的内存数据.所以我希望能够限制暂时待处理的任务数量.
如果我像这样创建ThreadPoolExecutor:
ThreadPoolExecutor executor = new ThreadPoolExecutor(numWorkerThreads, numWorkerThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(maxQueue));
Run Code Online (Sandbox Code Playgroud)
然后在队列填满并且所有线程都已忙时executor.submit(callable)抛出RejectedExecutionException.
executor.submit(callable)当队列已满且所有线程都忙时,我该怎么做才能阻塞?
编辑:我试过这个:
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
Run Code Online (Sandbox Code Playgroud)
它有点实现了我想要实现的效果但是以一种不雅的方式(基本上被拒绝的线程在调用线程中运行,因此这阻止了调用线程提交更多).
编辑:(提问后5年)
对于阅读此问题及其答案的任何人,请不要将接受的答案作为一个正确的解决方案.请仔细阅读所有答案和评论.
我正在尝试以下示例,但使用外部URL: 使用WebViews
该示例显示如何从assets文件夹加载HTML文件(file:// url)并将其显示在WebView中.
但是当我尝试使用外部网址时(例如http://google.com))时,我总是收到"网站不可用"错误.Android的内置浏览器可以访问所有外部URL.
我怀疑它与权限有关,但无法确认.
也就是说,当testSetupDone求值为false时会调用以下目标,在依赖链中执行目标吗?
<target name="-runTestsIfTestSetupDone" if="testSetupDone" depends="-runTests" />
Run Code Online (Sandbox Code Playgroud) 是否有任何SQL验证器可以检查多个数据库服务器的语法?
例如,我可能想检查特定查询是否适用于Oracle,MySQL和SQL Server.
我更关心SQL语法而不是被查询的实际模式,因此可以捕获主要语法错误的工具,比如检测limitSQL Server和Oracle中不支持该子句就足够了.
编辑:
有几个答案建议检查特定DBMS或ANSI标准的语法.
我正在寻找可能在两个或多个数据库(比如SQL Server和Oracle)之间定位某种功能联合的可能性.我希望能够使用我在特定应用程序中定位的所有DBMS支持的任何SQL功能.
我不确定这是否值得.我认为这取决于几个数据库共享的非ANSI功能的数量.如果只有极少数,那么最好是以ANSI标准为目标.
有没有人知道是否有一个Jenkins/Hudson插件,当构建被破坏时,它允许你设置一些状态(就像我将修复它!),以便团队中的其他人知道
谢谢你的帮助
我正在尝试修复IE 7中的内存泄漏.使用Drip进行调查,但是当大多数动态生成的DOM元素没有唯一ID时,它没有多大帮助.
提示?
标题为" Core Java Concurrency "的DZone refcard 声明:
设置后,无法更改最终字段值.将对象引用字段标记为final不会阻止从该字段引用的对象稍后更改.例如,最终的ArrayList字段不能更改为不同的ArrayList,但可以在列表实例上添加或删除对象.
和
最终字段冻结不仅包括对象中的最终字段,还包括从这些最终字段可到达的所有对象.
我对第二个陈述并不完全清楚.这是否意味着如果我在A类类型的A类中有一个final字段,而后者又有一个Integer类型的最终字段,那么A类实例的最终字段冻结只有在最后一个字段冻结b.c已经发生之后才会完成?
public class A{
public final B b = new B();
}
public class B{
public final Integer c = 10;
}
Run Code Online (Sandbox Code Playgroud) 编辑:哇,很多很棒的回复.是的,我使用它作为一个适应度函数来判断遗传算法执行的排序质量.因此,评估成本很重要(即,必须快速,最好O(n).)
作为我正在使用的AI应用程序的一部分,我希望能够根据其单调性(也就是其"排序性")对整数的候选数组进行评级.目前,我正在使用一种计算最长排序运行的启发式算法,然后将其除以数组的长度:
public double monotonicity(int[] array) {
if (array.length == 0) return 1d;
int longestRun = longestSortedRun(array);
return (double) longestRun / (double) array.length;
}
public int longestSortedRun(int[] array) {
if (array.length == 0) return 0;
int longestRun = 1;
int currentRun = 1;
for (int i = 1; i < array.length; i++) {
if (array[i] >= array[i - 1]) {
currentRun++;
} else {
currentRun = 1;
}
if (currentRun > longestRun) longestRun = currentRun;
}
return …Run Code Online (Sandbox Code Playgroud) math artificial-intelligence information-theory genetic-algorithm
我们内部编写的工具之一是提供了以下形式的cvs提交跟踪:
Checking in src/com/package/AFile.java;
/home/cvs/src/com/package/AFile.java,v <-- Afile.java
new revision: 1.1.2.56; previous revision: 1.1.2.55
done
Run Code Online (Sandbox Code Playgroud)
然后,该工具通过cvs update -r 1.1.2.56在已经签出特定代码分支的工作目录中发出命令从cvs获取文件.
如果工作目录中存在现有版本的AFile.java,则此命令可正常工作.但是当我们获得工作目录中没有版本的文件的跟踪时,该命令无法获取该文件.
有办法吗?
曾经有人向我展示了一个很酷的IntelliJ Idea插件,可以在Java源代码编辑器中显示来自CVS的所有用户提交信息.
它在窗口右侧有一个垂直条,用户更改/提交的每个代码块都以不同颜色突出显示,鼠标悬停将显示有关用户和版本等的详细信息.
我渴望在Eclipse中有类似的东西.
有什么指针吗?
concurrency ×2
cvs ×2
java ×2
android ×1
ant ×1
command-line ×1
eclipse ×1
history ×1
http ×1
hudson ×1
javascript ×1
jenkins ×1
math ×1
memory ×1
mysql ×1
oracle ×1
sql ×1
sql-server ×1
threadpool ×1
validation ×1
webview ×1