一个方法里start一个线程,怎么把线程计算得到的值作为这个方法的返回值

蓝大巨 2016-03-27 05:50:03
线程完全有可能在方法结束了才计算出结果, 如代码类似
private int i=0;
	public int getNum() {
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				int j =2;
				i+=j;
			}
		}).start();
		return i;
	}
...全文
329 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
李光宇 2016-03-28
  • 打赏
  • 举报
回复
开线程工作,主线程返回结果使用asynctask的就成
GaKenJiang 2016-03-28
  • 打赏
  • 举报
回复
引用 5 楼 lankun1234 的回复:
[quote=引用 2 楼 小雨_的回复:]可以在外面设个变量,线程中直接赋值给变量,线程运行完后在操作变量
怎么保证可以在线程完成后操作?[/quote] 可以加个监听器(实现线程结束后的操作),并且在Runnable.run的结束位置触发监听器。 或者另外开个线程,循环去判断线程是否完成。
蓝大巨 2016-03-28
  • 打赏
  • 举报
回复
引用 2 楼 小雨_的回复:
可以在外面设个变量,线程中直接赋值给变量,线程运行完后在操作变量
怎么保证可以在线程完成后操作?
ESC尛蜜蜂 2016-03-28
  • 打赏
  • 举报
回复
handler抛出数据显示
GaKenJiang 2016-03-28
  • 打赏
  • 举报
回复
引用 1 楼 xingzhong128 的回复:
楼主需要详细看一下java1.5的编程接口, Future,Callable class Task implements Callable<Integer>{     @Override     public Integer call() throws Exception {         System.out.println("子线程在进行计算");         Thread.sleep(3000);         int sum = 0;         for(int i=0;i<100;i++)             sum += i;         return sum;     } } ExecutorService executor = Executors.newCachedThreadPool(); Task task = new Task(); Future<Integer> result = executor.submit(task); try { System.out.println("task运行结果"+result.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } 用1.5的线程池就可以返回运行结果
既然都要新开线程了,又调用result.get() 把当线程阻塞了,那新开线程有什么意义?
AImmortaI 2016-03-28
  • 打赏
  • 举报
回复
可以在外面设个变量,线程中直接赋值给变量,线程运行完后在操作变量
icyblood198999 2016-03-28
  • 打赏
  • 举报
回复
如果是为了不在UI线程访问远程接口。可以用handler或者Asynctask。
xingzhong128 2016-03-28
  • 打赏
  • 举报
回复
引用 3 楼 a406579236 的回复:
[quote=引用 1 楼 xingzhong128 的回复:] 楼主需要详细看一下java1.5的编程接口, Future,Callable class Task implements Callable<Integer>{     @Override     public Integer call() throws Exception {         System.out.println("子线程在进行计算");         Thread.sleep(3000);         int sum = 0;         for(int i=0;i<100;i++)             sum += i;         return sum;     } } ExecutorService executor = Executors.newCachedThreadPool(); Task task = new Task(); Future<Integer> result = executor.submit(task); try { System.out.println("task运行结果"+result.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } 用1.5的线程池就可以返回运行结果
既然都要新开线程了,又调用result.get() 把当线程阻塞了,那新开线程有什么意义?[/quote] 如果你不是一定要自己用Thread搞,推荐用Asynctask做异步操作
xingzhong128 2016-03-27
  • 打赏
  • 举报
回复
楼主需要详细看一下java1.5的编程接口, Future,Callable class Task implements Callable<Integer>{     @Override     public Integer call() throws Exception {         System.out.println("子线程在进行计算");         Thread.sleep(3000);         int sum = 0;         for(int i=0;i<100;i++)             sum += i;         return sum;     } } ExecutorService executor = Executors.newCachedThreadPool(); Task task = new Task(); Future<Integer> result = executor.submit(task); try { System.out.println("task运行结果"+result.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } 用1.5的线程池就可以返回运行结果

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧