我有一个启动几个线程的应用程序,最终一个线程可能需要退出整个应用程序,但是其他线程可能处于任务中间,所以我想让它们在退出之前继续当前循环。
在下面的示例中,线程 2 不知道线程 1 何时尝试退出,它只是强制一切立即完成。
我怎样才能让 Thread2、3 和 4 等在关闭之前完成它们的循环?
编辑:为了解决重复的问题:这与父类不能负责操纵关闭的典型情况不同,任何单个线程都必须能够启动关闭。
Edit2:我还留下了我最终做的答案,这是已接受答案的实现。
class Scratch {
public static void main(String[] args) {
Thread Task1 = new Thread(new Task1());
Task1.start();
Thread Task2 = new Thread(new Task2());
Task2.start();
// ... more threads
}
public class Task1 implements Runnable {
public void run() {
while (true) {
// ...
System.exit(0);
// ...
}
}
}
public class Task2 implements Runnable {
public void run() {
while (true) {
// ...
// …
Run Code Online (Sandbox Code Playgroud) 是否可以创建一个tsquery,当一个单词中找到另一个单词的N个单词时将其匹配?
例如,短语“ 快速的棕色狐狸跳过了 ”,我可以使用“其次是”搜索运营商,但只有当我知道究竟有多少话是什么之间我在寻找:
SELECT to_tsquery('simple', 'quick <4> over') @@ to_tsvector('simple', 'quick brown fox jumps over');
Run Code Online (Sandbox Code Playgroud)
但是我可能事先不知道要寻找的词之间有多少个字,我想做些类似的事情:
to_tsquery('simple', 'quick <?4> over')
在这里,我试图指定它可以是以下任意一个:相隔1、2、3或4个字。我似乎无法找到一种方法来对我需要的单词的每个变体都复制原始的“后跟”运算符。
编辑:这必须扩大以适应用户可能创建的任何更大或更复杂的有效tsquery。提供的示例已简化为仅包含相关问题。
如何通过 CLI 向 MariaDB 发出命令而不实际跳转到交互使用模式?
我知道我可以输入mysql
,然后将我跳转到交互模式,在其中我可以编写 SQL 命令CREATE DATABASE dbname;
,然后退出以返回到常规终端。
不过我想跳过这一点并mysql 'CREATE DATABASE dbname;'
在一行中完成类似的操作。
我希望使用图形 API 发送带有大附件(最多 20MB)的电子邮件。有没有办法发送带有大附件的电子邮件?
之前对 Graph 的尝试发现了 4MB 的上传限制。我还考虑过将文件上传到 OneDrive 并通过引用附加它,但我相信这会遇到相同的 4MB 限制。
此限制排除了 Microsoft Graph。
我听说旧版 Outlook REST API 能够处理大型文件上传,但是,我今天找不到任何访问 Outlook REST API 的方法,看起来它已被弃用。此外,我从 Microsoft 读到的所有文档都很快鼓励您使用新的 Graph API。
查看 Azure 门户,似乎无法让我的应用程序通过 Outlook API 进行身份验证,这在任何地方都不是一个选项。
作为参考,这里是我一直在 Graph API 中使用的相关片段。
$mailBody = ...
'attachments' => [
[
'@odata.type' => '#microsoft.graph.fileAttachment',
'Name' => 'file.docx',
'ContentBytes' => $localFile
]
]
...
$response = $this->getGraph()->createRequest("POST", "/users/{primary-user}/sendMail")
->attachBody($mailBody)
->execute();
Run Code Online (Sandbox Code Playgroud)