快速业务通道

从java线程中获得运算结果 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

从java线程中获得运算结果

时间:2010-12-08

如果有任何的意见、批评或表扬:),请给我来信climber_2002@sina.com

java的线程是由Thread来实现的,一般我们创建线程进行一个复杂的运算,然后在主线程中对运算结果进行处理,但是Thread的run函数并没有返回值,那么我们运算出结果后,怎么通知其它线程呢,本文讲述了几种返回信息的方法。

一。java线程的创建

要创建线程有两种办法,一是继承Thread类,二是实现Runnable,然后将其传递给一个Thread的构造函数,实例如下(假设我们要在一个线程中计算1到10000的和):

1。继承Thread:

public class AddThread extends Thread { public void run() {   int result = 0;   for(int i = 1; i <= 10000; i++) {   result += i;   } } }

运行AddThread:

AddThread thread = new AddThread();

thread.start();

2。实现接口Runnable:

public class Add implements Runnable { public void run() {   int result = 0;   for(int i = 1; i <= 10000; i++) {   result += i;   } } }

运行该线程: Thread thread = new Thread(new Add());

thread.start();

从java线程中获得运算结果(2)

时间:2010-12-08

二、返回运算结果的方法

现在我们启动这个加法线程后,需要从这个线程中得到运算的结果,例如我们要在主线程中对运算结果进行显示。那么我们怎么实现呢?下面就讲述几种常见的方法,注意其中有一些是错误的方法

1。使用get方法(错误的)

我们可以在AddThread中加入一个getResult函数得到运算结果:

public class AddThread extends Thread {   private int result = 0;   public void run() {   for(int i = 0; i <= 10000; i++)    result += i;   }   public int getResult() {   return result;   } } /** 得到运算结果并显示在屏幕上 */ public class Test {   public static void main(String[] args) {   AddThread thread = new AddThread();   thread.start();   System.out.println("result is " + thread.getResult());   } }

得到的结果是: result is 0

因为这里主线程和addThread线程是同时运行,AddThread的运算还没有完成(甚至可能还没有开始),主线程就开始输出运算结果了,所以这种方式是错误的。

2。查询法(可行,但效率极低)

第二种方法是使用一个变量hasDone来表示运算是否完成,如果hasDone为false的时候表示运算尚未完成,否则表示运算已经完成。主线程不断查询这个变量,如果发现运算尚未完成,则进入循环等待,否则输出运算结果。

public class AddThread extends Thread {     private int result = 0;     private boolean hasDone = false;     public void run() {    for(int i = 0; i <= 10000; i++)    result += i;   hasDone = true;    }     public boolean hasDone() {     return hasDone;     }     public int getResult() {     return result; }   }    public class Test {      public static void main(String[] args) {       AddThread thread = new AddThread();       thread.start();       //如果运算没有完成,则循环等待       while (!thread.hasDone()) {        try {         Thread.sleep(100);        }        catch (InterruptedException ex) {        }       }       if (thread.hasDone())        System.out.println("result is " + thread.getResult());      }    }

结果显示: result is 50005000

主线程

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号