class target
{
StringBuffer sb
class thread
{
run()
{
process.exec("......");
sb.append("......");
}
public String f()
{
return sb.tostring();
}
}
public String f()
{
(new thread()).f();
}
}
public class
{
main()
{
process.exec()
{
print( (new target()).f() );
}
}
}
运行之后,发现sb没带出接过来。
请高手指点一下。
{
StringBuffer sb
class thread
{
run()
{
process.exec("......");
sb.append("......");
}
public String f()
{
return sb.tostring();
}
}
public String f()
{
(new thread()).f();
}
}
public class
{
main()
{
process.exec()
{
print( (new target()).f() );
}
}
}
运行之后,发现sb没带出接过来。
请高手指点一下。
2. 即使启动了线程,在main进程里也要等xx.run()执行完,才能取到值。必须加join.
我写的是个程序框架,只求能看清程序意图就可以。另外,process.exec("......");是调系统进程的意思,现在你明白我的意图了吧?davidafairy() 说用随时返回,那东西对我没什么用,我只关心最后的结果,至于中间发生过什么,有些是不受我控制的。我希望表达清楚我的意思,谢谢大家,再帮帮忙!!
不对
也就是说 return sb.toString();的时候start()的方法可能还没有执行,这样的话当然没有内容
建议楼主好好理解一下线程执行的机制
class Target extends Thread
{
private StringBuffer sb; public Target()
{
sb = new StringBuffer();
start();
}
public void run()
{
sb.append("...sssss...");
} public StringBuffer f()
{
return sb;
}}public class TargetTest
{
public static void main(String[] args)
{
Target target = new Target();
try
{
Thread.sleep(100);
} catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println(target.f().toString());
}
}
private StringBuffer sb=null;
public Test(StringBuffer sb) {
this.sb=sb;
}
class Target implements Callable<StringBuffer>{
public StringBuffer call(){
sb.append("append");
return sb;
}
}
public static void main (String[] args) {
StringBuffer sb=new StringBuffer("StringBuffer");
Test t=new Test(sb);
Test.Target tt=t.new Target();
FutureTask<StringBuffer> f=new FutureTask<StringBuffer>(tt);
new Thread(f).start();
StringBuffer sb1=null;
try{
sb1=f.get();
}catch(ExecutionException ee){
ee.printStackTrace();
}catch(InterruptedException ie){
ie.printStackTrace();
}
System.out.println (sb1);
}
}
用callable接口