有一程序:
public class Test{ TestThread t=new TestThread();
t.start();
System.out.println(t.testValue());}public class TestThread extends Thread{
private String testValue;
public void setTestValue(String testValue){
this.testValue=testValue;
}
public String getTestValue(){
return testValue;
}
public void run(){
//some operations
setTestValue("some value");
}}System.out.println(t.testValue());这句打印出来的是空值,怎样使得线程执行完成,才去取得testValue的值,怎样达到同步?
public class Test{ TestThread t=new TestThread();
t.start();
System.out.println(t.testValue());}public class TestThread extends Thread{
private String testValue;
public void setTestValue(String testValue){
this.testValue=testValue;
}
public String getTestValue(){
return testValue;
}
public void run(){
//some operations
setTestValue("some value");
}}System.out.println(t.testValue());这句打印出来的是空值,怎样使得线程执行完成,才去取得testValue的值,怎样达到同步?
解决方案 »
- 这样的程序是用什么写的?
- 很简单的题目,我想不明白
- [新手问题]关于main方法中的String[] args
- lastIndexOf方法,怎么用的啊?!
- 一道笔试题:请谈谈java中反射机制的意义,并列举几个成功运用反射机制的框架库。哪位高人能给我说说啊!谢了哈!
- linux下运行报段错误
- 这个问题让我嚼尽脑汁,我是束手无策啊,难怪是个新手啊,各位高手拉在下一把,快近来啊!!
- 一个还没入门的人对JMSN的问题(第二次发贴,如果解决,两个贴子分数全给)
- 下面处理的流有什么问题吗?总是报文件找不到错误
- 谁能详细告诉我JAVA的异常处理机制是怎么回事?
- socket联接有没有最大连接数的限制?
- 求助:在一个有几千行的文本文件里边提取数据,并统计!
TestThread t = new TestThread();
public void test(){
t.start();
while(!t.getFlag()){
Thread.yield();
}
System.out.println(t.getTestValue());
}
} class TestThread extends Thread {
private boolean setFlag = false;
private String testValue;
public void setTestValue(String testValue) {
this.testValue = testValue;
} public String getTestValue() {
return testValue;
} public void run() {
setTestValue("some value");
setFlag = true;
} public boolean getFlag(){
return setFlag;
}
}
t.start();
System.out.println(t.testValue());}
这个明显是编译通不过的
楼主的错误我帮他改过来了
这只是做一个伪程序,不是真正运行的程序。
to westarea(彩色的草原):
那主线程岂不是要一直在那里while(!t.getFlag()){
Thread.yield();
}做这个操作。
我以前做过,主线程可以等到子线程取到某个值。但现在忘了。
伪代码:
...WorkThread extends Thread{ ....run(){
synchronized(this){
//some operations
}
}
}......main(String[] args){
WorkThread wt=new WorkThread();
wt.start();
synchronized(wt){}}
伪代码:
...WorkThread extends Thread{
private String value;
getValue(){
return value;
}setValue(String value)
{
this.value=value;
}
....run(){
synchronized(this){
//some operations
notify();
}
}
}......main(String[] args){
WorkThread wt=new WorkThread();
wt.start();
synchronized(wt){
if (wt.isAlive()){
wt.wait();
}
}
}
System.out.println("value-------->"+wt.getValue());
就可以了。谢谢大家。