スレッドが値を返す方法の説明
5474 ワード
Java5 , , “ ” , , 。 , 。
Java ( ) 。
Callable , , Runnable 。
Callable , Future , get Callable Object 。
:
Java
import java.util.concurrent.*;
/**
* Java :
*
* @author Administrator
*/
public class Test {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//
ExecutorService pool = Executors.newFixedThreadPool(2);
//
Callable c1 = new MyCallable("A");
Callable c2 = new MyCallable("B");
// Future
Future f1 = pool.submit(c1);
Future f2 = pool.submit(c2);
// Future ,
System.out.println(">>>"+f1.get().toString());
System.out.println(">>>"+f2.get().toString());
//
pool.shutdown();
}
}
class MyCallable implements Callable{
private String oid;
MyCallable(String oid) {
this.oid = oid;
}
@Override
public Object call() throws Exception {
return oid+" ";
}
}
:
>>>A
>>>B
Process finished with exit code 0
, Callable Future API 。
:
。 。 , 。
、
start 。 。
Java
package mythread;
public class MyThread extends Thread
{
private String value1;
private String value2;
public void run()
{
value1 = " ";
value2 = " ";
}
public static void main(String[] args) throws Exception
{
MyThread thread = new MyThread();
thread.start();
System.out.println("value1:" + thread.value1);
System.out.println("value2:" + thread.value2);
}
}
:
value1:null
value2:null
。 run value1 value2 , null。 start value1 value2 , run value1 value2 。 , run value1 value2 。 , sleep , thread.start() :sleep(1000);
1 , , 。 run , , , 1 , run , , , 。
value1 value2 , , value1 value2 null。 null , 。 :
while (thread.value1 == null || thread.value2 == null);
, 。 , run ,value1 value2 , while , value1 value2 。 , :
while (thread.value1 == null || thread.value2 == null)
sleep(100);
while value1 value2 100 , 。 。
, Java , join 。 ,join 。 , 。 , :
Java
...
thread.start();
thread.join();
...
thread.join() , thread run , thread 。 , thread.join() MyThread 。
:
Work process , , process 。 , , 。
Java
package mythread;
class Data
{
public int value = 0;
}
class Work
{
public void process(Data data, Integer numbers)
{
for (int n : numbers)
{
data.value += n;
}
}
}
public class MyThread3 extends Thread
{
private Work work;
public MyThread3(Work work)
{
this.work = work;
}
public void run()
{
java.util.Random random = new java.util.Random();
Data data = new Data();
int n1 = random.nextInt(1000);
int n2 = random.nextInt(2000);
int n3 = random.nextInt(3000);
work.process(data, n1, n2, n3); //
System.out.println(String.valueOf(n1) + "+" + String.valueOf(n2) + "+"
+ String.valueOf(n3) + "=" + data.value);
}
public static void main(String[] args)
{
Thread thread = new MyThread3(new Work());
thread.start();
}
}
process 。 , 。 Windows API API 。 , 。 process run