- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道如何在 java 中捕获被上下文切换中断的线程。我有两个线程并排运行,它们都在向上和向下更改同一个 int,为了我的报告,我想知道如何捕捉开关,并做一些事情。 (例如,在发生这种情况时制作一个简单的 System.out)谢谢!
最佳答案
就应用而言context switches不可见 - 没有信号或消息发送到通知它的应用程序。
唯一可能提示应用程序的是时间。例如,如果您反复为一个紧凑的循环计时,您可能能够(不可靠地)检测到循环执行时发生的上下文切换,因为与执行循环相比所需的时间更长没有被打断。不幸的是,这只适用于像 C 这样的编译语言。像 Java 这样使用虚拟机的语言使得几乎不可能可靠地检测到这样的事情,因为循环变慢可能归因于多种原因,例如垃圾收集器在起作用。
此外,请记住,任何系统调用——尤其是 I/O 调用,如您用来记录此类事件的调用——通常会导致隐式上下文切换,这可能会导致您可能想做的任何事情都中断.
为什么你会想知道这样的事情呢?尤其是来自 Java 应用程序?
编辑:
好吧,如果您在创建同步问题之后,这是我的版本:
public class Test {
public static long count = 0;
public static void main(String[] args) {
for (int run = 0; run < 5; ++run) {
Test.count = 0;
Thread[] threads = new Thread[10];
for (int i = 0; i < threads.length; ++i) {
threads[i] = new Thread(new Runnable() {
public void run() {
for (long i = 0; i < (10 * 1000 * 1000 * 1000); ++i) {
Test.count += 1;
}
}
});
}
for (int i = 0; i < threads.length; ++i) {
threads[i].start();
}
for (int i = 0; i < threads.length; ++i) {
try {
threads[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Test.count);
}
}
}
这是我从一次运行中得到的结果:
1443685504
1439908180
1461384255
1477413204
1440892041
关于java - 有可能发现操作系统在线程上进行上下文切换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8420438/
降本手段一招鲜,增效方法吃遍天; 01 互联网行业里; 降本策略千奇百怪,手段却出奇一致;增效方法五花八门,手段更是花里胡哨; 对于企业来说;
有什么方法可以使用 angularjs 中的部分进行代码分组吗? 原因 --- 我的 Controller 包含太多代码。该 Controller 包含了多个方法和大量功能的代码,降低了代码的可读性。
不幸的是,我的数据库的数据模型必须改变,所以我正在寻找最轻松的方式来迁移我的数据。 此时情况如何: create table cargo{ id serial primary key, per
在 QTextEdit 对象中,假设我想知道字符在鼠标光标下的位置。 我会写... void MyQTextEditObject::mousePressEvent(QMouseEvent* mouse
是否可以在 C++ 中返回一个 return 语句或做一些具有类似功能的事情? 例如,如果代码中有几个函数将指针作为输入,并且每个函数都检查指针是否为 nullptr,这将很方便。如果它是一个 nul
我的 PC 上有一个控制台应用程序,它是 signalR 服务器。 我有一个 html 页面,它是互联网上的 signalR 客户端。但我尝试连接服务器,但我有一个错误的请求 400 错误。如果服务器
我想将应用程序作为后台进程运行。当点击应用程序图标时,它不会显示任何 View ,只会启动后台进程。 最佳答案 对于 iOS 这是不可能的,但是对于 android,react native 有 he
我知道有(昂贵的)框架可以让你在 VS C# 中编写 android 应用程序并将其编译为 android apk。 我也知道,可以在 VS 中编写 Java 应用程序(link)。 是否有可能,甚至
我在做: can :manage, :all if user.role == 'admin' can :approve, Anuncio do |anuncio| anuncio.try(:apr
我是一名优秀的程序员,十分优秀!