创建执行计算密集型任务的Java应用程序

来源:java认证发布时间:2012-11-12 13:05:40java认证视频

通过Windows Azure,你可以使用一个虚拟机来处理计算密集型任务。前面给大家介绍了云平台上创建一个虚拟机和云平台上创建一个服务总线命名空间,本文将给您介绍一下如何创建一个执行计算密集型任务的Java应用程序。

1. 在你的开发机器(并不一定是你所创建的虚拟机)上,为Java下载Windows Azure SDK.

2. 在本小节的末尾创建一个Java控制台应用程序使用的示例代码。在本教程中,我们将使用TSPSolver.Java作为Java文件的名字。修改your_service_bus_namespace、 your_service_bus_owner、 以及 your_service_bus_key 等占位符,分别使用您的服务总线命名空间、 默认发行人和默认密钥值。

3. 编码后,导出应用程序到一个可运行的Java归档(JAR),并把所需的库到打包已生成的JAR.在本教程中,我们将使用TSPSolver.jar作为生成的JAR名称。

// TSPSolver.Java    import com.microsoft.WindowsAzure.services.core.Configuration;    import com.microsoft.WindowsAzure.services.core.ServiceException;    import com.microsoft.WindowsAzure.services.serviceBus.*;    import com.microsoft.WindowsAzure.services.serviceBus.models.*;    import Java.io.*;    import Java.text.DateFormat;    import Java.text.SimpleDateFormat;    import Java.util.ArrayList;    import Java.util.Date;    import Java.util.List;    pubpc class TSPSolver {    //  Value specifying how often to provide an update to the console.    private static long loopCheck = 100000000;    private static long nTimes = 0, nLoops=0;    private static double[][] distances;    private static String[] cityNames;    private static int[] bestOrder;    private static double minDistance;    private static ServiceBusContract service;    private static void buildDistances(String fileLocation, int numCities) throws Exception{    try{    BufferedReader file = new BufferedReader(new InputStreamReader(new DataInputStream(new FileInputStream(new File(fileLocation)))));    double[][] cityLocs = new double[numCities][2];    for (int i = 0; i<numCities; i++){    String[] pne = file.readLine()。sppt(“, ”);    cityNames[i] = pne[0];    cityLocs[i][0] = Double.parseDouble(pne[1]);    cityLocs[i][1] = Double.parseDouble(pne[2]);    }    for (int i = 0; i<numCities; i++){    for (int j = i; j<numCities; j++){    distances[i][j] = Math.hypot(Math.abs(cityLocs[i][0] - cityLocs[j][0]), Math.abs(cityLocs[i][1] - cityLocs[j][1]));    distances[j][i] = distances[i][j];    }    }    } catch (Exception e){    throw e;    }    }    private static void permutation(List<Integer> startCities, double distSoFar, List<Integer> restCities) throws Exception {    try    {    nTimes++;    if (nTimes == loopCheck)    {    nLoops++;    nTimes = 0;    DateFormat dateFormat = new SimpleDateFormat(“MM/dd/yyyy HH:mm:ss”);    Date date = new Date();    System.out.print(“Current time is ” + dateFormat.format(date) + “. ”);    System.out.println(  “Completed ” + nLoops + “ iterations of size of ” + loopCheck + “.”);    }    if ((restCities.size() == 1) && ((minDistance == -1) || (distSoFar + distances[restCities.get(0)][startCities.get(0)] + distances[restCities.get(0)][startCities.get(startCities.size()-1)] < minDistance))){    startCities.add(restCities.get(0));    newBestDistance(startCities, distSoFar + distances[restCities.get(0)][startCities.get(0)] + distances[restCities.get(0)][startCities.get(startCities.size()-2)]);    startCities.remove(startCities.size()-1);    }    else{    for (int i=0; i<restCities.size(); i++){    startCities.add(restCities.get(0));    restCities.remove(0);    permutation(startCities, distSoFar + distances[startCities.get(startCities.size()-1)][startCities.get(startCities.size()-2)],restCities);    restCities.add(startCities.get(startCities.size()-1));    startCities.remove(startCities.size()-1);    }    }    }    catch (Exception e)    {    throw e;    }    }    private static void newBestDistance(List<Integer> cities, double distance) throws ServiceException, Exception {    try    {    minDistance = distance;    String cityList = “Shortest distance is ”+minDistance+“, with route: ”;    for (int i = 0; i<bestOrder.length; i++){    bestOrder[i] = cities.get(i);    cityList += cityNames[bestOrder[i]];    if (i != bestOrder.length -1)    cityList += “, ”;    }    System.out.println(cityList);    service.sendQueueMessage(“TSPQueue”, new BrokeredMessage(cityList));    }    catch (ServiceException se)    {    throw se;    }    catch (Exception e)    {    throw e;    }    }    pubpc static void main(String args[]){    try {    Configuration config = ServiceBusConfiguration.configureWithWrapAuthentication(    “your_service_bus_namespace”, “your_service_bus_owner”, “your_service_bus_key”);    service = ServiceBusService.create(config);    int numCities = 10;  // Use as the default, if no value is specified at command pne.    if (args.length != 0)    {    if (args[0].toLowerCase()。compareTo(“createqueue”)==0)    {    // No processing to occur other than creating the queue.    QueueInfo queueInfo = new QueueInfo(“TSPQueue”);    service.createQueue(queueInfo);    System.out.println(“Queue named TSPQueue was created.”);    System.exit(0);    }    if (args[0].toLowerCase()。compareTo(“deletequeue”)==0)    {    // No processing to occur other than deleting the queue.    service.deleteQueue(“TSPQueue”);    System.out.println(“Queue named TSPQueue was deleted.”);    System.exit(0);    }    // Neither creating or deleting a queue.    // Assume the value passed in is the number of cities to solve.    numCities = Integer.valueOf(args[0]);    }    System.out.println(“Running for ” + numCities + “ cities.”);    List<Integer> startCities = new ArrayList<Integer>();    List<Integer> restCities = new ArrayList<Integer>();    startCities.add(0);    for(int i = 1; i<numCities; i++)    restCities.add(i);    distances = new double[numCities][numCities];    cityNames = new String[numCities];    buildDistances(“c://TSP//cities.txt”, numCities);    minDistance = -1;    bestOrder = new int[numCities];    permutation(startCities, 0, restCities);    System.out.println(“Final solution found!”);    service.sendQueueMessage(“TSPQueue”, new BrokeredMessage(“Complete”));    }    catch (ServiceException se)    {    System.out.println(se.getMessage());    se.printStackTrace();    System.exit(-1);    }    catch (Exception e)    {    System.out.println(e.getMessage());    e.printStackTrace();    System.exit(-1);    }    }    }

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答