public class Job extends Thread{
int a =0;
public void run() {
for(int i =0;i<100;i++){
a = i;
}
}
public int getInt(){
return a;
}}在建立这个线程的时候,用getInt()的方法获得的a总是0,请问如何才能获得的是99?我的想法是,把一部分的工作交给一个线程去跑,等它跑完了,会返回给我一个数据!
int a =0;
public void run() {
for(int i =0;i<100;i++){
a = i;
}
}
public int getInt(){
return a;
}}在建立这个线程的时候,用getInt()的方法获得的a总是0,请问如何才能获得的是99?我的想法是,把一部分的工作交给一个线程去跑,等它跑完了,会返回给我一个数据!
int a =0;
boolean canGeta = false;
public void run() {
for(int i =0;i<100;i++){
a = i;
}
canGeta = true;
setInt(a);
}
public int getInt(){
return a;
}public void setInt(int a){
this.a = a;
}}
当canGeta是true的时候才能去geta,当然用swingworker的机制更好
也许对你有帮助!Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。计算完成后只能使用 get 方法来获取结果,如有必要,计算完成前可以阻塞此方法。取消则由 cancel 方法来执行。还提供了其他方法,以确定任务是正常完成还是被取消了。一旦计算完成,就不能再取消计算。如果为了可取消性而使用 Future 但又不提供可用的结果,则可以声明 Future<?> 形式类型、并返回 null 作为底层任务的结果。用法示例(注意,下列各类都是构造好的。) interface ArchiveSearcher { String search(String target); }
class App {
ExecutorService executor = ...
ArchiveSearcher searcher = ...
void showSearch(final String target)
throws InterruptedException {
Future<String> future
= executor.submit(new Callable<String>() {
public String call() {
return searcher.search(target);
}});
displayOtherThings(); // do other things while searching
try {
displayText(future.get()); // use future
} catch (ExecutionException ex) { cleanup(); return; }
}
}
FutureTask 类是 Future 的一个实现,Future 可实现 Runnable,所以可通过 Executor 来执行。例如,可用下列内容替换上面带有 submit 的构造: FutureTask<String> future =
new FutureTask<String>(new Callable<String>() {
public String call() {
return searcher.search(target);
}});
executor.execute(future);
int a = 0; public void run() {
for (int i = 0; i < 1000000; i++) {
a = i;
}
getA(); } public int getA() {
System.out.println(a);
return a; } public void setA(int a) {
this.a = a;
} public static void main(String[] args) throws InterruptedException {
Job job = new Job();
Thread sThread = (Thread) job;
sThread.start();
sThread.sleep(10);//此处让线程睡眠几毫秒
job.getA();//这是对象中的a,既线程睡眠时a循环到的值。你总是返回0是由于你get的时候线程已经死掉,执行完毕了,要得到线程循环的值你在run 方法内部去get或者让线程先睡眠一会你去get。
2,用java.util.concurrent.Future
public void run() {
for(int i = 0;i<20;i++){
a = i;
System.out.println(a);
}
}
public int getValue(){
return a;
}
public static void main(String[] args) {
GetVALUE value = new GetVALUE();
Thread thread = new Thread(value);
thread.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(value.getValue());
}
}