我所追求的是一种配置线程池使用的兼容方式.理想情况下,其余代码不应受到影响.我可以使用一个线程池与1个线程,但这不是我想要的.有任何想法吗?
ExecutorService es = threads == 0 ? new CurrentThreadExecutor() : Executors.newThreadPoolExecutor(threads);
// es.execute / es.submit / new ExecutorCompletionService(es) etc
Run Code Online (Sandbox Code Playgroud) 我要求异步执行任务,同时丢弃任何进一步的请求,直到任务完成.
同步方法只是将任务排队,不会跳过.我最初想过使用SingleThreadExecutor,但也排队等待任务.然后我查看了ThreadPoolExecutor,但是它读取队列以获取要执行的任务,因此将执行一个任务并且至少有一个任务排队(其他任务可以使用ThreadPoolExecutor.DiscardPolicy丢弃).
我唯一能想到的就是使用信号量来阻止队列.我带着以下示例来展示我想要实现的目标.有更简单的方法吗?我错过了一些明显的事吗?
import java.util.concurrent.*;
public class ThreadPoolTester {
private static ExecutorService executor = Executors.newSingleThreadExecutor();
private static Semaphore processEntry = new Semaphore(1);
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 20; i++) {
kickOffEntry(i);
Thread.sleep(200);
}
executor.shutdown();
}
private static void kickOffEntry(final int index) {
if (!processEntry.tryAcquire()) return;
executor.
submit(
new Callable<Void>() {
public Void call() throws InterruptedException {
try {
System.out.println("start " + index);
Thread.sleep(1000); // pretend to do work
System.out.println("stop " …
Run Code Online (Sandbox Code Playgroud) 我有一组表,逻辑上是出于性能原因将一个表拆分成多个表.我需要编写一个有效地将所有表连接在一起的查询,因此我使用结果的单个where子句.我已成功使用UNION对每个子表明确使用WHERE子句的结果,如下所示
SELECT * FROM FRED_1 WHERE CHARLIE = 42
UNION
SELECT * FROM FRED_2 WHERE CHARLIE = 42
UNION
SELECT * FROM FRED_3 WHERE CHARLIE = 42
Run Code Online (Sandbox Code Playgroud)
但由于有十个单独的子表更新WHERE子句每次都很痛苦.我想要的是这样的
SELECT *
FROM (
SELECT * FROM FRED_1
UNION
SELECT * FROM FRED_2
UNION
SELECT * FROM FRED_3)
WHERE CHARLIE = 42
Run Code Online (Sandbox Code Playgroud)
如果它有所不同,则查询需要针对DB2数据库运行.
这是我需要做的更全面(消毒)的版本.
select *
from ( select * from FRD_1 union select * from FRD_2 union select * from FRD_3 ) as FRD,
( select * from REQ_1 union select …
Run Code Online (Sandbox Code Playgroud) 当谈到grails时,我是一个完整的菜鸟(当谈到groovy时,我仍然非常乏味)所以如果这是一个愚蠢的问题,我道歉.
我正在构建一个简单的Web应用程序,我想基于文件系统对象(即目录结构和文件类型)而不是数据库数据来控制应用程序中的部分域.这样做有多容易,或者与GORM交织在一起的域对象是不值得尝试的?
我有一个数据访问类,它作为独立的Java应用程序的一部分运行.它目前正在工作,这意味着定义了一个事务管理器,但我想重构该类以减少事务的范围,但如果我这样做,我得到org.hibernate.HibernateException:没有Hibernate Session绑定到线程,并且配置不允许在这里创建非事务性的,这意味着移动@Transactional会以某种方式阻止它被识别.
我的原始版本的重构方法是私有的,但我发现建议将其更改为public,因为在某些情况下注释不会被选中.
public class DoStuff {
@Transactional
public void originalMethod() {
// do database stuff
...
// do non-database stuff that is time consuming
...
}
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是重构以下内容
public class DoStuff {
public void originalMethod() {
doDatabaseStuff()
doNonDatabaseStuff()
}
@Transactional
public void doDatabaseStuff() {
...
}
public void doNonDatabaseStuff() {
...
}
}
Run Code Online (Sandbox Code Playgroud) java hibernate transactions spring-annotations hibernate-annotations
java ×3
concurrency ×2
db2 ×1
grails ×1
groovy ×1
hibernate ×1
sql ×1
subquery ×1
transactions ×1
union ×1
unit-of-work ×1