- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我是一名 CS 学生,今天在类里面我们学习了 Java 多线程编程。教授让学生写一个简单的程序来演示线程的调度。每个学生都有这样一段代码:
public class MyThread extends Thread {
private int num;
public MyThread(int num) {
this.num = num;
}
public void run() {
System.out.println("Thread " + num + " is starting.");
}
public static void main( String [] args ) {
for (int i=0; i<100; i++) {
MyThread mt = new MyThread(i);
mt.start();
}
}
}
由于线程不一定按顺序执行,所以我们期待这条线
Thread
i
is starting
不要严格按照 0、1、2... 到 99 的顺序。相反,我们期待类似的东西
Thread 0 is starting
Thread 5 is starting
Thread 2 is starting
...(九十行之后)
Thread 95 is starting
Thread 99 is starting
Thread 98 is starting
(程序运行结束)
有趣的是,虽然 Windows 用户似乎具有所描述的模式,但 Mac 用户在前 10 个线程中只有半随机顺序。之后,线程按照严格的升序执行,从 Thread 10 is starting
到 Thread 99 is starting
。
具体来说,Mac 输出如下所示:
Thread 0 is starting.
Thread 3 is starting.
Thread 2 is starting.
Thread 1 is starting.
Thread 5 is starting.
Thread 6 is starting.
Thread 4 is starting.
Thread 8 is starting.
Thread 7 is starting.
Thread 9 is starting.
Thread 10 is starting.
Thread 11 is starting.
Thread 12 is starting.
Thread 13 is starting.
Thread 14 is starting.
Thread 15 is starting.
Thread 16 is starting.
Thread 17 is starting.
Thread 18 is starting.
Thread 19 is starting.
Thread 20 is starting.
Thread 21 is starting.
Thread 22 is starting.
Thread 23 is starting.
Thread 24 is starting.
Thread 25 is starting.
Thread 26 is starting.
Thread 27 is starting.
Thread 28 is starting.
Thread 29 is starting.
Thread 30 is starting.
Thread 31 is starting.
Thread 32 is starting.
Thread 33 is starting.
Thread 34 is starting.
Thread 35 is starting.
Thread 36 is starting.
Thread 37 is starting.
Thread 38 is starting.
Thread 39 is starting.
Thread 40 is starting.
Thread 41 is starting.
Thread 42 is starting.
Thread 43 is starting.
Thread 44 is starting.
Thread 45 is starting.
Thread 46 is starting.
Thread 48 is starting.
Thread 49 is starting.
Thread 47 is starting.
Thread 50 is starting.
Thread 51 is starting.
Thread 52 is starting.
Thread 53 is starting.
Thread 54 is starting.
Thread 55 is starting.
Thread 56 is starting.
Thread 57 is starting.
Thread 58 is starting.
Thread 59 is starting.
Thread 60 is starting.
Thread 61 is starting.
Thread 62 is starting.
Thread 63 is starting.
Thread 64 is starting.
Thread 65 is starting.
Thread 66 is starting.
Thread 67 is starting.
Thread 68 is starting.
Thread 69 is starting.
Thread 70 is starting.
Thread 71 is starting.
Thread 72 is starting.
Thread 73 is starting.
Thread 74 is starting.
Thread 75 is starting.
Thread 76 is starting.
Thread 77 is starting.
Thread 78 is starting.
Thread 79 is starting.
Thread 80 is starting.
Thread 81 is starting.
Thread 82 is starting.
Thread 83 is starting.
Thread 84 is starting.
Thread 85 is starting.
Thread 86 is starting.
Thread 87 is starting.
Thread 88 is starting.
Thread 89 is starting.
Thread 90 is starting.
Thread 91 is starting.
Thread 92 is starting.
Thread 93 is starting.
Thread 94 is starting.
Thread 95 is starting.
Thread 96 is starting.
Thread 97 is starting.
Thread 98 is starting.
Thread 99 is starting.
为什么 Mac 和 Windows 的行为不同?这与使用的调度算法有关吗?如果是这样,算法是什么?这会如何影响其他 JVM 多线程程序?
最佳答案
Why do Mac and Windows behave differently?
线程调度是基于操作系统内部的。您只能说 Mac OSX 和 Windows 的行为不同,因为它们是不同的操作系统。如果您有不同的硬件,这也会有所不同。
Is this related to the scheduling algorithms used?
创建一个线程是非常昂贵的,而且你的任务是非常短暂的,所以在这种情况下你不太可能看到调度的效果。实际上,您是在测试线程的创建方式。
If so, what are the algorithms and how might this affect other JVM Multi-threaded programs?
您需要查看操作系统的内部结构。
对编写良好的 JVM 程序的影响应该完全没有。您应该编写对特定操作系统或硬件运行方式的细微差异不敏感的程序。
你也不应该疯狂地创建线程,这显然是低效的。推测一个写得不好或效率低下的程序是如何运行的并不是很有用。
我建议从一个使用多个线程比使用一个线程执行得更好的问题开始(在您的示例中,一个线程会更有效)并查看调度是否对一系列 CPU 类型有影响。
关于java - 初学者 Java 多线程编程 : Scheduling Difference between Window and Mac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28752003/
有人可以看看我对 Quartz xml 的简单测试(每秒触发一次)并给我一个线索,为什么没有作业被添加到 sheduler 中?基本上我希望每秒触发“SimpleJob”类,我可以确定正在传递哪个作业
我创建了一个 Akka 的调度程序来每天按固定时间发送邮件(例如每天早上 6:00)。那么 Actor 怎么称呼呢?我的意思是我应该使用什么逻辑?谢谢。 最佳答案 只是计算现在和下一个下午 6 点之间
我正在使用 Quartz 调度,更具体地说是一个设置为每周每天晚上 10 点醒来的 cron 触发器。 我接触的另一个小组正在询问调度程序在一天中将唤醒多少次以检查它是否需要运行作业。晚上 10 点作
出现这些错误: 2018-01-22 18:00:59,797 [ServerService Thread Pool -- 79] ERROR org.quartz.ee.servlet.Quartz
出现这些错误: 2018-01-22 18:00:59,797 [ServerService Thread Pool -- 79] ERROR org.quartz.ee.servlet.Quartz
我对 Quartz Scheduler 工作线程有疑问。我创建了一个调度程序任务,它将每 3 小时执行一次。我创建了一份工作和一个触发器。当我执行这个调度程序时,我观察到一个奇怪的行为,同一个作业被分
我正在为我的网络应用程序实现 Quartz 调度程序。 我必须每周安排周一、周二重复 3 周 Quartz Scheduler 中的两种方式, 1)简单触发器: Trigger trigger = n
我正在使用 airbnb 的 Airflow ,我创建了一个简单的任务,如下所示。但是,即使我将间隔设置为每小时或任何其他间隔,调度程序仍会继续运行任务。我注意到的另一件事是,如果我将调度间隔设置为“
嗨,我是 Quartz Scheduler 的新手,我是第一次实现它。我想知道调度程序的开始调用是否会执行暂停的作业?或 暂停的作业只能通过恢复调用而不是其他任何方式来激活。请帮助我。 最佳答案 首先
如果我有一个运行着一堆触发器的 Quartz 调度程序,并且我想清除所有触发器,那么最好如何做到这一点? 我考虑过迭代组和名称,随时调用取消安排,但是当有数千个触发器到位时,这似乎非常慢(取消安排 1
嗨,我是 Quartz Scheduler 的新手,我是第一次实现它。我想知道调度程序的开始调用是否会执行暂停的作业?或 暂停的作业只能通过恢复调用而不是其他任何方式来激活。请帮助我。 最佳答案 首先
我在这里遇到了很多问题。我使用 ocLazyLoader 来加载完整的日历并且它运行良好,但是每当我尝试包含 fullCalendar-scheduler 时我在 JavaScript 中遇到这个错误
我最近在 Tardos 和 Kleinberg 的算法设计的第 4 章中阅读了有关间隔调度算法的内容。为间隔调度问题提供的解决方案是这样的: Sort the n intervals based on
如果一个进程被硬件中断(第一级中断处理程序)中断,那么 CPU 调度程序是否意识到这一点(例如,调度程序是否独立于被中断的进程计算硬件中断的执行时间)? 更多详情:我正在尝试解决以下问题:htop 中
为什么它们用于不同类型的任务?在处理计算任务与 io 任务时,它们有何不同? Schedulers.computation( ) - meant for computational work such
我在 couchbase 中使用 Observables。 Schedulers.io() 和 Schedulers.computation() 之间有什么区别? 最佳答案 RxJava调度器简介。
我遇到了一个可观察的问题: 在服务中我有一个函数(在 edit.component 中): public patchOne(entity: Tier): Observable { const
我正在研究 Flux 和 Mono,并在多线程环境中使用它们,并使用提供工作线程的 Schedular。 有很多选项可以使用 elastic、parallel 和 newElastic 来启动 Sch
FullCalendar 有一个名为 Scheduler 的附加组件,我正尝试将其与 PrimeNG-Schedule 组件一起使用。查看 PrimeNG 文档,有一个“选项”属性,我可以使用它向 F
我搜索了有关如何使用 Mass Transit 的 Quartz 集成 (https://github.com/MassTransit/MassTransit-Quartz) 的示例实现或博客文章。
我是一名优秀的程序员,十分优秀!