问题标签 [java-threads]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 在 notifyAll() 之前没有被线程锁定的同步对象
我想要一个布尔值来通知系统的某些部分特定服务已启动。
出于某种奇怪的原因,我收到了错误消息java.lang.IllegalMonitorStateException: object not locked by thread before notifyAll()
。
奇怪的是 notifyAll() 位于一个同步块内,该块控制我调用 notifyAll() 的对象。
我的课是这样开始的:
我正在开发一个安卓应用程序。我认为它不会影响任何事情,但我会用该评论来补充这个问题,以防影响 java 的工作方式。
如果对象被锁定在同步块中,为什么会出现异常?
java - 如果我在同一个类上同步了两个方法,它们可以同时运行吗?
如果我在同一个类上同步两个方法,它们可以在同一个对象上同时运行吗?例如:
我知道我不能methodA()
在两个不同的线程中对同一个对象运行两次。同样的事情methodB()
。
但是我可以在仍在运行的methodB()
同时在不同的线程上运行吗?methodA()
(同一个对象)
java - 为什么这段代码会失败?
在查看这个问题时,我注意到了这段代码:
但是我不明白为什么会失败。其他线程是否无法访问“实际”停止变量?
java - 通知方法如何工作
根据 javadoc notify 唤醒正在此对象的监视器上等待的单个线程。如果有任何线程正在等待该对象,则选择其中一个被唤醒。该选择是任意的,并由实施自行决定。线程通过调用其中一个等待方法在对象的监视器上等待。
我想知道 notify 如何实现这种行为。在我读过的许多网站上,它会发送一个信号,但是信号在这里意味着什么?
notify 是直接向第一个等待线程发送信号还是向线程调度程序发送信号?
java - 为什么 Thread.sleep 不好用
为这个重复的问题道歉,但我还没有找到任何令人满意的答案。大多数问题都有自己的特定用例:
Java - 替代 thread.sleep
有没有更好或替代的方法来跳过/避免在 Java 中使用 Thread.sleep(1000)?
我的问题是针对非常通用的用例。等待条件完成。做一些操作。检查一个条件。如果条件不成立,等待一段时间再做同样的操作。
例如,考虑一种通过调用其 createAPI 表来创建 DynamoDB 表的方法。DynamoDB 表需要一些时间才能变为活动状态,因此该方法将调用其 DescribeTable API 以定期轮询状态,直到某个时间(假设 5 分钟 - 由于线程调度导致的偏差是可以接受的)。如果表在 5 分钟内变为活动状态,则返回 true,否则抛出异常。
这是伪代码:
我知道通过使用Thread.sleep
阻塞当前线程,从而消耗资源。但是在一个中等规模的应用程序中,一个线程是一个大问题吗?
我在某处阅读ScheduledThreadPoolExecutor
并在那里进行状态轮询。但同样,我们必须用至少 1 个线程来初始化这个池,在该线程中运行可运行的方法来进行轮询。
关于为什么使用的任何建议Thread.sleep
都被认为是一个坏主意,以及实现上述相同的替代选择是什么。
java - Java 通知其他线程
我有一个线程从执行开始每秒打印经过的时间,另一个线程每十五秒打印一条消息。第一个线程应该更新一个线程间共享的时间变量,并在每次更新时间变量时通知其他线程读取时间变量。这是我目前拥有的:
我对线程很陌生,我不确定我是否正确地实现了我已经拥有的东西。另外,我不知道如何通知另一个线程。我觉得我目前没有走在正确的道路上。
如果有人有任何帮助,非常感谢!
java - 同步方法内的线程中的同步块会发生什么?
所以基本上如果你有以下情况会发生什么:
- 比如说,一个活动需要在迭代集合的不同线程中运行。因此,为什么要在具有不同对象的方法中创建线程。
- 这是“正确”的方式,还是有更好的方式?
- 这会带来任何威胁吗?
java - 在Java中使用两个线程打印奇数和偶数
我正在尝试使用如下所示的两个线程来做到这一点。有人可以指出我在这里做的明显错误吗?
但是这个程序只打印 1 并退出。打印 1 后,available 应该为 true,printEven 应该唤醒、打印并将 available 设置为 false。我不明白这里出了什么问题?我看到了其他解决方案,但想知道为什么我的解决方案不起作用。
java - Java - 强制关闭程序(使用正在运行的线程)
一般来说
,即使有(非守护程序)线程仍在运行,我也希望能够关闭我的 Java 应用程序。在Java中可能吗?(来自 C++ 世界,这似乎是一个基本要求)
原因
我正在构建一个框架来加载实现接口的外部插件。在关闭之前,我close()
在每个插件上调用一个函数,期望它释放所有资源并停止他的所有线程。但是由于该插件是由我工作场所的几个团队构建的,我无法真正控制它们,而且不止一次有人没有关闭他的所有线程,导致应用程序卡在关闭阶段。
我想在调用每个插件close()
函数后强行关闭程序,如果他们不照顾他们的资源,那是他们自己的问题......
java - Android 线程没有结束。它不能重新开始
在这种情况下,当用户单击按钮时,会启动一个名为“startAThread”的线程,并且按钮变得不可见。三秒钟后,当线程完成其工作时,按钮再次变为可见。当用户第二次单击该按钮时,它会在 LogCat 中给出错误:
代码:-
日志猫:-