下面的代码里,每次用{write(***)}向服务器发送指令的时候,要等到线程(run)接收到服务器返回的结果后,再发送下一条指令,所以我使用了线程和synchronized。现在用this.wait(6000)就能实现这个效果,但是等待的时间是我自己估算的,实际执行的时间有时长,有时短。请问有其他方法能知道run什么时候结束,然后就解除锁定吗?public class TmhTelnet1 implements Runnable, TelnetNotificationHandler {
public static void main(String args[]){
Thread th_read = new Thread(this);
th_read.start();
write("username");
write("password");
write("ipconfig /all");
} private void write(String command) {
synchronized (this) {
out.println(command);
out.flush();
this.wait(6000);
}
} public void run() {
InputStream instr = tc.getInputStream();
do {
ret_read = instr.read(buff);
if (ret_read > 0) {
String str = new String(buff, 0, ret_read,TER_CODING);
}
} while (ret_read >= 0);
}
}
public static void main(String args[]){
Thread th_read = new Thread(this);
th_read.start();
write("username");
write("password");
write("ipconfig /all");
} private void write(String command) {
synchronized (this) {
out.println(command);
out.flush();
this.wait(6000);
}
} public void run() {
InputStream instr = tc.getInputStream();
do {
ret_read = instr.read(buff);
if (ret_read > 0) {
String str = new String(buff, 0, ret_read,TER_CODING);
}
} while (ret_read >= 0);
}
}
解决方案 »
- hibernate Criterion使用。
- spring自动注入的一个小问题
- 奇怪的环境变量问题(急急急,在线等待)
- 小妹求一关于JXL导出EXCEL写法
- 请问在项目中,在jsp页面要取到后台的值的情况下,后台用request.setA...还是用session比较好?
- Hibernate 查询 空值的验证
- 批量生成10位不一样纯数字序列号
- 这个Struts1.1 ActionForward 问题快给我搞死了。。。。请高手同行帮我看一下,万分感谢!
- 請教大蝦,如何用jacob將office 2007中的文件打開,另存
- http://localhost:8080/test.jsp可以,但http://192.168.1.1:8080/tes.jsp就不可以,我用的是Tomcat5,请指教?
- 从网上找了个Telnet到远程主机的程序,调试时能打印出结果,但是运行时就打印不出来?
- 使用Spring+OpenJPA+mysql出现的问题
两种方案,一种是直接死等线程结束:
th_read.join();
这个直接取代掉wait()函数就行了。
另一种就是延续你的做法,在run()函数最后面加上:
TmhTelnet1.this.notifyAll();
这个可以主动唤醒wait()