Tag: 等待

如何在java中打开文件之前等待windows进程完成

我有一个实现了一个监听器,通知我们是否在特定目录中收到一个新文件。 这是通过轮询和使用TimerTask实现的。 现在程序已设置好,一旦收到新文件,它就会调用另一个打开文件的java程序,并validation它是否是正确的文件。 我的问题是,由于轮询在指定的秒数后发生,可能会出现在该目录中复制文件并因此被Windows锁定的情况。 这会引发IOException,因为尝试打开它进行validation的其他java程序不能(“File正被另一个进程使用”)。 有没有办法让我知道Windows何时完成复制,然后调用第二个程序从java进行validation? 如果有人需要它们以帮助我,我将非常乐意发布代码片段。 谢谢

TIME_WAIT中的tcp连接将不允许重新连接,java

在与服务器建立TCP连接后,我关闭了我的linux应用程序并调用了Socket.close()。 检查netstat -pant,我看到连接处于TIME_WAIT状态。 这使我无法立即连接回服务器,因为我使用相同的端口进行连接。 相反,我必须等待连接到TIME_WAIT状态的超时,然后才能重新连接。 我用套接字方法玩了很多运气 – set_so_timeout(),set_keepalive(),set_so_linger()和set_reuseaddr() – 这篇文章的确切拼写可能不正确。 我的问题是如何从TIME_WAIT状态获得连接,以便我可以立即重新建立连接? 请告诉我。 谢谢,jbu

java make a method等待另一个进程的响应

在我的程序中,我连接到另一种语言的解释器进程。 我有时需要程序向解释器询问几件事并使用它的响应。 该过程存储在IProcess变量中,并且通过该过程的IStreamsProxy完成通信。 为了收到响应,我在IStreamsProxy中添加了一个IStreamListener。 但是,当我写入IStreamsProxy(使用write()方法)时,我需要代码来等待响应,例如要调用的侦听器的streamAppend方法。 我试着使用wait()和notify()方法,但我不知道应该在哪些对象上调用它们。 使通信调用如下方法的查询类: /** * Sends a command to the interpreter. Makes the current thread wait for an answer of the interpreter. * @throws IOException */ private synchronized void send(String command) throws IOException{ this.s48Proxy.write(command); try { System.out.println(“waiting for reply”); this.wait(); } catch (InterruptedException e) { System.out.println(“interruption exception: “+e.getMessage()); } } 和听众: […]

程序停止:wait()和notify()

我试图实现这一点:创建两个不同的线程,一个打印奇数,一个打印偶数。 一旦一个线程打印一个数字,它就必须等待另一个线程,依此类推,即一个接一个。 为实现这一点,我使用synchronized块以及wait()和notify()。 我正在创建一个类,其对象将用于传递给两个线程中的synchronized块。 这是代码: – >这是用于传递给synchronized块的对象。 package com.vipin.multithread.variousdemos; public class SyncObject { public SyncObject () { } } 奇数线程: package com.vipin.multithread.variousdemos; public class OddThread implements Runnable { private Thread t; int index=0; SyncObject so=null; int odd_nums[] = {1,3,5,7,9}; public OddThread(SyncObject so) { t = new Thread(this,”Odd Thread”); this.so = so; t.start(); } public Thread […]

窗户上的虚假唤醒。 可能吗?

我最近学会了“虚假唤醒”任何人都说这个问题只适用于某些类型的Linux PC。 我用的是windows。 我写了Spurious唤醒测试。 我得到的结果是可能的。 但我想为你展示这个测试。 也许我在某处犯了错误。 我最初的变种: import java.util.Random; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; public class TestSpuriousWakeups { static final int MAX_THREADS = 600; static final Object mutex = new Object(); static final CountDownLatch allThreadsStarted = new CountDownLatch(MAX_THREADS); static final CountDownLatch allThreadsFinished = new CountDownLatch(1); static /*final*/ volatile AtomicInteger processedThreads = new AtomicInteger(); static /*final*/ […]

是否在线程结束时发出通知? 为什么这个代码示例有效?

我正在寻找线程的一些难题,我无法弄清楚为什么以下一致打印999999 : class Job extends Thread { private Integer number = 0; public void run() { for (int i = 1; i < 1000000; i++) { number++; } } public Integer getNumber() { return number; } } public class Test { public static void main(String[] args) throws InterruptedException { Job thread = new Job(); thread.start(); […]

新的multithreading – 如何在java中使用wait()和notify()?

我正在尝试编写一个包含2个类的程序,一个控制器和一个执行大量计算的类。 控制器创建另一个类的几个实例,然后告诉他们所有人开始计算(并行)。 它们在完成时都返回,控制器恢复,然后,一段时间后,控制器将新数据传递给它们,让它们再次运行计算。 理想情况下,我可以使用参数调用start(),但这是不可能的,因此控制器调用计算器中的方法将数据存储在全局中,然后启动计算线程并返回,直到我尝试再次启动线程,它告诉我线程已经死了。 所以我试图使运行成为一个无限循环,等待通知,运行计算,将结果存储在全局中,以便控制器可以在以后检索它们,然后重新开始等待。 所以类似于: //in controller: Calculator calc=new Calculator(); calc.runCalculations(data); while(calc.isCalculating()){ //do nothing } System.out.println(“results: “+calc.getAnswer()); calc.runCalculations(data2); //in calculator: public runCalculations(Data data){ globalData=data; this.notify(); } public void run(){ while(true){ synchronized(this){ wait(); } calculating=true; globalData=calculate(globalData); calculating=false; } }

在Java中等待的最佳方式

我有一个需要等待一段时间的应用程序。 它必须等到服务器填充了几个数据字段。 服务器的API为我提供了一种请求数据的方法,很简单…… 服务器的API还提供了一种接收我的数据的方法,一次一个字段。 它没有告诉我何时完成所有字段的填充。 在我的请求完成服务器处理之前,最有效的方法是什么? 这是一些伪代码: public class ServerRequestMethods { public void requestData(); } public interface ServerDeliveryMethods { public void receiveData(String field, int value); } public class MyApp extends ServerRequestMethods implements ServerDeliveryMethods { //store data fields and their respective values public Hashtable myData; //implement required ServerDeliveryMethods public void receiveData(String field, int value) { myData.put(field, […]

如何使用多个线程的wait和notify协议

具体来说,有人可以告诉我这段代码有什么问题。 它应该启动线程,所以应该打印“输入线程…”5次,然后等到调用notifyAll()。 但是,它会随机打印“Entering ..”和“Done ..”,并且仍在等待其他人。 public class ThreadTest implements Runnable { private int num; private static Object obj = new Object(); ThreadTest(int n) { num=n; } @Override public void run() { synchronized (obj) { try { System.out.println(“Entering thread “+num); obj.wait(); System.out.println(“Done Thread “+num); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void […]

使用WebDriver暂时绕过隐式等待

当使用隐式等待时, 正如这里所建议的那样 ,我仍然有时想要断言元素的直接不可见性或不存在。 换句话说,我知道应该隐藏一些元素,并且希望我的测试能够快速地进行断言,而不需要花费几秒钟因为(否则有用)隐式等待。 我试过的一件事就是像这样的辅助方法: // NB: doesn’t seem to do what I want private boolean isElementHiddenNow(String id) { WebDriverWait zeroWait = new WebDriverWait(driver, 0); ExpectedCondition c = invisibilityOfElementLocated(By.id(id)); try { zeroWait.until(c); return true; } catch (TimeoutException e) { return false; } } 但是在上面的代码中,对until()的调用仅在隐式等待时间过去之后才返回,即它没有按我想要的那样做。 到目前为止,这是我发现的唯一方法: @Test public void checkThatSomethingIsNotVisible() { turnOffImplicitWaits(); // … the actual […]