Java:向某个线程发送执行
Java: send an execution to a certain thread
我正在研究线程,我想知道是否可以强制线程执行某些操作。
所以,问题是我有这样的方法:
public void asyncSleep() {
Supplier<Boolean> sleeper = () -> {
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
}
return true;
};
CompletableFuture<Boolean> promise = CompletableFuture.supplyAsync(sleeper, ex);
promise.thenAccept(u -> {
System.out.println("thread=" + Thread.currentThread());
});
}
而且我需要原始线程(执行 asyncSleep()
方法的线程)成为执行 thenAccept
的线程。这可能吗?如果可以,我该怎么做?
如果您希望它以非阻塞方式工作,并且您仍然希望原始线程(执行 asyncSleep
的线程)也执行您传递给 thenAccept
的方法,那么唯一的方法如下:
您需要使用仅具有单线程的 ExecutorService
。使用此执行程序执行 asyncSleep
,但是随后,您必须将相同的执行程序作为第二个参数传递给 thenAcceptAsync
(而不是 thenAccept
)。
那么如果你的线程没有崩溃,也没有被新线程的执行者替换,那么执行这两种方法的线程应该是完全相同的。
但这是一个人为的用例。
我正在研究线程,我想知道是否可以强制线程执行某些操作。
所以,问题是我有这样的方法:
public void asyncSleep() {
Supplier<Boolean> sleeper = () -> {
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
}
return true;
};
CompletableFuture<Boolean> promise = CompletableFuture.supplyAsync(sleeper, ex);
promise.thenAccept(u -> {
System.out.println("thread=" + Thread.currentThread());
});
}
而且我需要原始线程(执行 asyncSleep()
方法的线程)成为执行 thenAccept
的线程。这可能吗?如果可以,我该怎么做?
如果您希望它以非阻塞方式工作,并且您仍然希望原始线程(执行 asyncSleep
的线程)也执行您传递给 thenAccept
的方法,那么唯一的方法如下:
您需要使用仅具有单线程的 ExecutorService
。使用此执行程序执行 asyncSleep
,但是随后,您必须将相同的执行程序作为第二个参数传递给 thenAcceptAsync
(而不是 thenAccept
)。
那么如果你的线程没有崩溃,也没有被新线程的执行者替换,那么执行这两种方法的线程应该是完全相同的。
但这是一个人为的用例。