Tag: 监视器

如何监视其他Java应用程序生成的exception或错误?

我想找到或开发一个可以作为守护进程运行的应用程序,当主机上运行的Java应用程序出现任何exception或错误时,通过电子邮件或短信通知管理员。 我知道JVMTI可以实现我的目标的一部分,但它会影响受监控应用程序的性能(我不知道它会有多少,如果它很轻微也是可以接受的),除了它似乎是一个麻烦的工作开发一个JVMTI代理,我不确定如果几个应用程序同时使用相同的代理运行会发生什么。 有没有更好的解决方案? 提前致谢。

为什么在Java中调用信号后调用解锁?

在Java中,为什么在调用signal( notFull.signal()和notFull.signal() )之后解锁被调用( notFull.signal() )? 顺序在pthread中反转 。 那么为什么会有区别呢? 谢谢。 从多处理器编程的艺术, 1 class LockedQueue { 2 final Lock lock = new ReentrantLock(); 3 final Condition notFull = lock.newCondition(); 4 final Condition notEmpty = lock.newCondition(); 5 final T[] items; 6 int tail, head, count; 7 public LockedQueue(int capacity) { 8 items = (T[])new Object[capacity]; 9 } 10 […]

使用现有JProgressBar的Java ProgressMonitorInputStream

我正在玩Java的ProgressMonitorInputStream来监控数据流经BufferedInputStream。 这是我正在尝试的代码: InputStream in = new BufferedInputStream( new ProgressMonitorInputStream( new JFrame(),”Scanning”,new FileInputStream(dir.getSearchInputFile()))); 这完全正常,并弹出一个新的JFrame窗口,其中包含一个显示输入流进度的进度条。 有没有让ProgressMonitorInputstream更新另一个JFrame中存在的现有JProgressBar? 我尝试了各种方法,例如使用构造函数传递JProgressBar,或者尝试在参数中指定帧。 每次我尝试,我只是得到一个新的JFrame。 我错了吗? 任何投入将不胜感激。 谢谢

几个线程可以在Java中对同一个监视器进行锁定吗?

目前我们正在分析一个tomcat线程转储。 在tomcat上同时运行的所有线程的单个线程转储包含以下行: … “soldOutJmsConsumerContainer-1” prio=10 tid=0x00007f8409c14800 nid=0x231 in Object.wait() [0x00007f8403a9f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:485) at com.tc.object.RemoteObjectManagerImpl.waitUntilRunning(RemoteObjectManagerImpl.java:150) at com.tc.object.RemoteObjectManagerImpl.basicRetrieve(RemoteObjectManagerImpl.java:216) – locked (a com.tc.object.RemoteObjectManagerImpl) … “catalina-exec-33” daemon prio=10 tid=0x0000000041bc4000 nid=0x832 in Object.wait() [0x00007f8400f73000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:485) at com.tc.object.RemoteObjectManagerImpl.waitUntilRunning(RemoteObjectManagerImpl.java:150) at com.tc.object.RemoteObjectManagerImpl.basicRetrieve(RemoteObjectManagerImpl.java:216) – locked (a com.tc.object.RemoteObjectManagerImpl) […]

等待Timer在Java中完成

我正在使用java.util.Timer来安排定期任务。 有一次,我想关闭它, 等待它完成 。 Timer.cancel()将阻止任何未来的任务运行。 如何确保当前没有任何任务正在运行(或等待它们,如果它们是?) 我可以引入外部同步机制,但我不知道它们如何涵盖所有情况。 例如,如果我在任务中的某个监视器上进行同步,我仍然会错过任务刚刚开始执行但没有使用监视器的情况。 等待所有任务真正完成的建议做法是什么,包括当前正在运行的任务?

为什么等待条件释放锁定但信号没有?

我编写下面的代码来测试线程在等待Condition对象时何时处于唤醒Condition 。 但是我发现在调用signal()之后我必须解锁。 此方法不会释放锁定,而await()将释放此锁定。 这是来自条件#等待 与此条件关联的锁被primefaces释放 ,并且当前线程因线程调度而被禁用,并处于hibernate状态,直到发生以下四种情况之一: 这是来自Conditon#signal 唤醒一个等待线程。 如果有任何线程在这种情况下等待,则选择一个线程进行唤醒。 然后该线程必须在从await返回之前重新获取锁。 但在我的代码中,这是不正确的,直到我们解锁。 为什么这样设计? 因为在我看来,当我们决定向其他人发出信号时,我们不应再持有锁,我错了吗? 既然我们可以在调用signal和unlock之间做很多事情,比如说我睡了10秒,那么java信号的另一个线程到底是什么时候? 还有另一个背景线程在我们发signal和unlock之间工作吗? public class WorkerThread extends Thread{ @Override public void run() { Monitor.lock.lock(); while (!Monitor.isConditionTrue){ try { Monitor.condition.await(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(“THREAD ID “+this.getId()+”——-working ——–“); System.out.println(“——singnall——–“); Monitor.isConditionTrue=true; Monitor.condition.signal(); try { Thread.sleep(3000);//here, the thread is sleeping while […]

Java监视器有多重?

假设我有一个包含数千个对象的数组,以及可能访问每个对象的少量线程。 我想保护对其中一个对象方法的访问。 最简单的方法是将该方法声明为synchronized 。 但是,这可能会导致创建数千个监视器,无论它们实现的方式如何。 如果这是Win32,我永远不会创建数千个内核对象,如Mutex,但CRITICAL_SECTION 可能是合理的。 我想知道Java的情况如何。 鉴于争用的可能性很低,监视器的使用是否会超过他们所需的大量内存? 在Java中使用这种低粒度同步的做法有多常见? (显然有一些解决方法,比如使用一个更小的同步对象数组,可以使用一些哈希来访问。我不是在寻找一个实用的解决方案,我正在寻找一个洞察力)。

如何在Java应用程序中打开和关闭监视器?

如何在Java应用程序中打开和关闭监视器? 如果你想知道为什么,这是一个自助服务终端风格的应用程序,在晚上关闭显示器会很棒。 是的,您可以在机器的屏幕保护程序设置中执行此操作,但以编程方式执行此操作并避免必须在每台计算机上进行配置将非常棒。