• Java的线程模型为我们提供了更好的解决方案,这就是join方法。在前面已经讨论过,join的功能就是使用线程 从异步执行变成同步执行
  • 当线程变成同步执行后,就和从普通的方法中得到返回数据没有什么区别了。因此,可以使用如下的代码更有效地解决这个问题:
  • Java代码
  • thread.start();
  • thread.join();
  • ...
  • 在thread.join()执行完后,线程thread的run方法已经退出了,也就是说线程thread已经结束了。因此,在thread.join()后面可以放心大胆地使用MyThread类的任何资源来得到返回数据。 

public static String getAddress (final InputStream inputStream, final String mobile) {
Thread thread = new Thread() {
public void run() {
try {
Log. i(TAG, "inputStream: " + inputStream.available());
String soap = readSoapFile(inputStream, mobile);
byte[] data = soap.getBytes(); URL url = new URL(
"http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx" );
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setDoOutput( true);
conn.setConnectTimeout(5 * 1000);
conn.setRequestMethod( "POST");
conn.setRequestProperty( "Content-Type",
"application/soap+xml; charset=utf-8");
conn.setRequestProperty( "Content-Length",
String. valueOf(data.length)); OutputStream outputStream = conn.getOutputStream();
outputStream.write(data);
outputStream.flush();
outputStream.close(); if (conn.getResponseCode() == 200) {
address =parseResponseXML(conn
.getInputStream());
}
} catch (Exception e) {
}
};
};
thread.start();
try { thread.join(); } catch (Exception e) {}
if(address !=null){
return address ;
}
return null ;
}

  

thread.join 从异步执行变成同步的更多相关文章

  1. 深入理解 JS 引擎执行机制(同步执行、异步执行以及同步中的异步执行)

    首先明确两点: 1.JS 执行机制是单线程. 2.JS的Event loop是JS的执行机制,深入了解Event loop,就等于深入了解JS引擎的执行. 单线程执行带来什么问题? 在JS执行中都是单 ...

  2. java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)

    本篇我们将讨论以下知识点: 1.线程同步问题的产生 什么是线程同步问题,我们先来看一段卖票系统的代码,然后再分析这个问题: package com.zejian.test; /** * @author ...

  3. ajax同步、异步执行简单理解与证明

    此理解范例代码来自前几篇随笔! 首先我们来先了解下AJAX: Ajax:全称“Asynchronous Javascript and XML”(异步Javascript和XML),他是由Javascr ...

  4. js文件引用方式及其同步执行与异步执行

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp74   任何以appendChild(scriptNode) 的方式引入 ...

  5. Go同步和异步执行多个任务封装

    同步执行类RunnerAsync 支持返回超时检测,系统中断检测 错误常量定义 //超时错误 var ErrTimeout = errors.New("received timeout&qu ...

  6. Node.js的那些坑——如何让异步并发方法同步顺序执行(for循环+异步操作)

    1 前言 nodejs的回调,有时候真的是让人又爱又恨的,当需要用for循环把数据依次存入数据库,但是如果使用正常的for循环,永远都是最后一次值的记录,根本不符合要求. 解决此方案有几种,例如闭包( ...

  7. Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表,以及同步和异步执行模式)

    系列文章导航 Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表) Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数) Adobe ...

  8. C# Thread.Join的报错情形——论执行完的线程能够成功执行Join吗

    结论: 能, 执行完的线程调用Join不会抛出错误. Thread.Join()是什么? Join()函数用于阻塞地等待线程结束, 其行为是在线程A中调用了线程B的Join()后, 线程A将一直阻塞在 ...

  9. 【转】C#异步编程及其同步机制

    C#异步编程及其同步机制 本篇文章涵盖一下几部分内容: 1. 什么是异步编程,为什么会需要异步编程 2. .NET下的异步编程及其发展 3. .NET线程同步机制及线程间数据封送 4. 异步模式 5. ...

随机推荐

  1. 简单查询(select)

      在数据库中,字符串进行运算时,会将字符串内容转化为数字进行运算 查询语法:select 列     from 表     where 条件     order by 排序     asc:升序   ...

  2. PHP 常用的header头部定义汇总

    <?phpheader('HTTP/1.1 200 OK'); // ok 正常访问header('HTTP/1.1 404 Not Found'); //通知浏览器 页面不存在header(' ...

  3. linux安装jdk和scala

    安装jdk 1.下载jdk 2.在linux中创建一个文件夹java,我习惯放在user下 3.上传jdk安装包到java下,然后解压 4.ect/profile下修改文件,添加环境变量 JAVA_H ...

  4. Actor模型前奏

    软件系统从观察者模式到事件驱动然后再到消息驱动,经过了不断的抽象.当软件通过消息来交互的时候再没有了直接引用,没有了耦合,所有的一切都变成了异步和并行

  5. GridView实现方块布局

    效果如下: 先创建一个BaseViewHolder package com.example.griddemo; import android.util.SparseArray; import andr ...

  6. c#实现万年历示例分享 万年历农历查询

    cs.cs(类页面) using System;using System.Collections.Generic;using System.Linq;using System.Web; namespa ...

  7. LeetCode Power of Four

    原题链接在这里:https://leetcode.com/problems/power-of-four/ 题目: Given an integer (signed 32 bits), write a ...

  8. Unix时间戳

    Unix时间戳 http://www.linuxidc.com/Linux/2016-01/127572.htm 这里的时间戳,指的就是Unix时间戳(Unix timestamp).它也被称为Uni ...

  9. JAVA:通过poi读取excel

    POI是一个apache开源的jar包,可以通过搜索 java POI找到官网,并下载开发包. 包含的功能: 可以读取excel2003,2007,2010等. 读取excel2007/2010的代码 ...

  10. Redis集群~StackExchange.redis连接Twemproxy代理服务器

    回到目录 本文是Redis集群系列的一篇文章,主要介绍使用StackExchange.Redis进行Twemproxy(文中简称TW)代理服务的连接过程,事务上,对于TW来说,我们需要理解一下它的物理 ...