「java多线程返回值」java 多线程返回值
今天给各位分享java多线程返回值的知识,其中也会对java 多线程返回值进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
java 多线程 有返回值怎么实现
作为一个完全面向对象的语言,Java提供了类 Java.lang.Thread 来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程,我们以后的讨论都将围绕这个类进行。 Thread 类最重要的方法是 run()
JAVA多线程问题,想让每次线程运行后都能返回值给成员变量,要如何修改
把a定义成公共的,在thread里i++时,a也跟着++就行,,不过你的代码怎么构造出了好几个线程???如果这几个线程公用一个i变量,那么Thread1需要实现Runnable接口,而不是继承Thread类
public class XianChengNew {
public static int a = 0;
public static void main(String[] args) {
Thread1 t1 = null;
t1 = new Thread1(a);
t1.start();
boolean flag = true;
while (flag){
if ( !t1.isAlive()){
flag = false;
}
}
System.out.println("Main a = " + a);
}
}
class Thread1 extends Thread {
private int i = 0;
public Thread1(int i) {
super();
this.i = i;
}
@Override
public void run() {
// super.run();
// for(int s = 0; s 100; s++) {
add();
// }
}
synchronized void add() {
for (int c = 0; c 5; c++) {
i++;
XianChengNew.a++;
System.out.println("i= " + i);
System.out.println("a= " + XianChengNew.a);
}
}
}
java 线程中的值如何返回
如果是java5的话,那么Java5新增了Callable接口获得线程的返回值,用法如下
package com.ronniewang;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class GetReturnValueFromCallable {
private static final int SLEEP_MILLS = 3000;
private static final int SECOND_MILLS = 1000;
private static int sleepSeconds = SLEEP_MILLS / SECOND_MILLS;
ExecutorService executorService = Executors.newCachedThreadPool();
/**
* 在创建多线程程序的时候,我们常实现Runnable接口,Runnable没有返回值,要想获得返回值,Java5提供了一个新的接口Callable
*/
public static void main(String[] args) {
new GetReturnValueFromCallable().testCallable();
}
private void testCallable() {
/**
* Callable需要实现的是call()方法,而不是run()方法,返回值的类型有Callable的类型参数指定,
* Callable只能由ExecutorService.submit() 执行,正常结束后将返回一个future对象
*/
FutureString future = executorService.submit(new CallableString() {
public String call() throws Exception {
Thread.sleep(SLEEP_MILLS);
return "I from callable";
}
});
while (true) {
/**
* 获得future对象之前可以使用isDone()方法检测future是否完成,完成后可以调用get()方法获得future的值,
* 如果直接调用get()方法,get()方法将阻塞值线程结束
*/
if (future.isDone()) {
try {
System.out.println(future.get());
break;
} catch (InterruptedException e) {
// ignored
} catch (ExecutionException e) {
// ignored
}
}
else {
try {
System.out.println("after " + sleepSeconds-- + " seconds, we will get future");
Thread.sleep(SECOND_MILLS);
} catch (InterruptedException e) {
// ignored
}
}
}
}
}
package com.ronniewang;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class GetReturnValueFromCallable {
private static final int SLEEP_MILLS = 3000;
private static final int SECOND_MILLS = 1000;
private static int sleepSeconds = SLEEP_MILLS / SECOND_MILLS;
ExecutorService executorService = Executors.newCachedThreadPool();
/**
* 在创建多线程程序的时候,我们常实现Runnable接口,Runnable没有返回值,要想获得返回值,Java5提供了一个新的接口Callable
*/
public static void main(String[] args) {
new GetReturnValueFromCallable().testCallable();
}
private void testCallable() {
/**
* Callable需要实现的是call()方法,而不是run()方法,返回值的类型有Callable的类型参数指定,
* Callable只能由ExecutorService.submit() 执行,正常结束后将返回一个future对象
*/
FutureString future = executorService.submit(new CallableString() {
public String call() throws Exception {
Thread.sleep(SLEEP_MILLS);
return "I from callable";
}
});
while (true) {
/**
* 获得future对象之前可以使用isDone()方法检测future是否完成,完成后可以调用get()方法获得future的值,
* 如果直接调用get()方法,get()方法将阻塞值线程结束
*/
if (future.isDone()) {
try {
System.out.println(future.get());
break;
} catch (InterruptedException e) {
// ignored
} catch (ExecutionException e) {
// ignored
}
}
else {
try {
System.out.println("after " + sleepSeconds-- + " seconds, we will get future");
Thread.sleep(SECOND_MILLS);
} catch (InterruptedException e) {
// ignored
}
}
}
}
}
输出结果:
after 3 seconds, we will get future
after 2 seconds, we will get future
after 1 seconds, we will get future
I from callable
关于java多线程返回值和java 多线程返回值的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-01,除非注明,否则均为
原创文章,转载请注明出处。