你可以做一个Notify接口,在该接口方法中对结果作处理。然后你的主线程实现该接口,并在子线程构造的时候传递给他,当子线程做完运算后调用该方法就可以了。注意该方法需要同步,如果你又多个子线程。public interface Notify{
public void perform(result);
}public class MainThread implements Notify{
public synchronized void perform(result){
System.out.print(result);
} public void doCal(){
new SubThread(this).start();
}
}public class SubThread extends Thread{
private Notify notify;
public SubThread(Notify notify){
this.notify = notify;
} public void run(){
.....
notify.perform(result);
}
}
public void perform(result);
}public class MainThread implements Notify{
public synchronized void perform(result){
System.out.print(result);
} public void doCal(){
new SubThread(this).start();
}
}public class SubThread extends Thread{
private Notify notify;
public SubThread(Notify notify){
this.notify = notify;
} public void run(){
.....
notify.perform(result);
}
}
解决方案 »
- 求大神解释线程start和用ExecutorService的区别。(非书上基本概念,请看代码)
- SOS,java分组线程不会啊!
- ###【荣誉榜】感谢nihuajie05 配合我做系统功能测试,奖励技术分20
- 请问大虾们下面是什么加密算法 是一个邮件系统easymail里面的
- java中怎樣表示一個無窮大﹐或無窮小數﹖
- 数据库操作~大家怎么用的
- 不来看后悔哦,关于多线程的问题
- 如何编译两个java文件?如sphere.java,createspheres.java
- 为什么我的 JBuilder 7/6 中代码窗口光标总是错位的啊,怎么弄好
- 纪念特别的日子,为了我爱的jeff -- 大派分喽 ^_^
- 如何从数据库里取出blob对象?
- RMI远程参数调用的问题,急!!!T_T
在主线程必须要子线程的值的时候,... //主线程的代码
subthread.join(); //等待子线程执行完毕
... //好了,此时应可以取得运算结果了
zdandfw()能否将你的方法说的详细一点。
gfzhx(小小) 的方法比较难,我正在看。
ServerSocket serverSocket = new ServerSocket(监听的端口号);
Socket socket = serverSocket.accept();
DataInputStream is = new DataInputStream(socket.getInputStream());
if(is.readUTF().equals("end")){
Object result = subthread.result;
}在子线程中加入下面代码:
Socket s = new Socket("localhost", port);
DataOutputStream os = new DataOutputStream(s.getOutputStream());
os.writeUTF("end");
1.必须得到子程序的值的时候,不得到值无法执行
2.不等待
的状态下,主程序做什么?join()只是确保计算完成
但是使用join()后,主线程完全停下来等待子线程。如同死机一般,导致我的按钮无法点击。我的意思表达清楚了吧,高手请指点。
在子线程运行过程中检测这个变量,若为true则停止子线程运行.
子线程运行完毕后,加一调用:... //子线程的运算,若有
//循环就可用
//canceled判定结束SwingUtilities.invokeLater(new Runnable(){ //交给事件派发线程,
public void run() //待会调用.
{
if (!canceled)
{
//运行完毕的处理代码
}
}
});
} //子线程可以结束了主线程在适当时机将canceled 置为true.
/*下面交给事件派发线程处理结果(将在主线程中运行).*/
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run()
{
if (!canceled)
{
//运行处理运算结果的代码
}
}
});
} //子线程结束