Tag: 异步

异步从Web服务器调用应用程序

我有一个使用Spring制作的Web应用程序,它运行在Tomcat上。 在同一台机器上有一个普通的Java应用程序。 我想通过从Web服务器调用它来执行Java应用程序,但我想这样做,以便应用程序不会使用服务器的资源(它涉及分类器的培训,因此它可能占用大量资源和并且它不能挂起服务器(所以它必须异步调用)。 有没有办法做到这一点?

使用单个线程进行异步处理

即使阅读http://krondo.com/?p=1209或异步调用是否始终创建/调用新线程? 我仍然对如何在固有的单线程系统上提供异步调用感到困惑。 到目前为止,我将解释我的理解并指出我的疑虑。 我读到的一个例子是描述提供异步处理请求的TCP服务器 – 用户可以调用方法,例如get(Callback c)并且稍后会调用回调。 现在,我的第一个问题 – 我们已经有两个系统,一个服务器和一个客户端。 这不是我的意思,因为事实上我们至少有两个线程 – 一个在服务器端,一个在客户端端。 我读的另一个例子是JavaScript,因为这是使用Node.js的单线程异步系统的最突出的例子。 我无法理解的是,也许用Java思考,是这样的:如果我执行下面的代码(对于不正确的,可能是恶劣的语法道歉): function foo(){ read_file(FIle location, Callback c) //asynchronous call, does not block //do many things more here, potentially for hours } 对read文件的调用执行(sth)并返回,允许我的其余函数执行。 既然只有一个线程,即执行我的函数的线程,那么同一个线程(执行我的东西的唯一一个线程)将如何从磁盘读取字节? 基本上,在我看来,我缺少一些基本机制,就像某种类型的循环调度程序,它本身就是单线程的,可能会将任务拆分为较小的或调用multithreading组件,这些组件会产生一个线程,读取文件。 提前感谢所有评论并指出我在路上的错误。 更新 :感谢所有回复。 帮助我解决这个问题的更多好消息来源是: http://www.html5rocks.com/en/tutorials/async/deferred/ http://lostechies.com/johnteague/2012/11/30/node-js-must-know-concepts-asynchrounous/ http://www.interact-sw.co.uk/iangblog/2004/09/23/threadless(.NET ) http://ejohn.org/blog/how-javascript-timers-work/ (计时器的内在函数) http://www.mobl-lang.org/283/reducing-the-pain-synchronous-asynchronous-programming/

Spring Framework上的multithreading(或异步)计算

我正在学习Spring Framework,它非常棒。 我想使用JAVAmultithreading,但我不知道如何使用Spring Framework。 这是服务代码: //StudentService.java public List loadGradesForAllStudents(Date date) { try{ List grades = new ArrayList(); List students = loadCurrentStudents(); // LOAD FROM THE DB for(Student student : students) { // I WANT TO USE MULTITHREAD FOR THIS PART // LOAD FROM DB (MANY JOINS) History studentHistory = loadStudentHistory(student.getStudentId(), date); // CALCULATION PART Grade […]

Java NIO – 非阻塞通道与AsynchronousChannels

Java NIO提供SocketChannel和ServerSocketChannel ,可以设置为非阻塞模式(异步)。 大多数操作返回与成功相对应的值或者尚未执行操作。 除了回调function之外, AynchronousSocketChannel和AsynchronousServerSocketChannel的目的是什么?

如何在Java中对Hive进行异步调用?

我想以异步方式在服务器上执行Hive查询。 Hive查询可能需要很长时间才能完成,所以我不想阻止通话。 我目前正在使用Thirft进行阻塞调用(在client.execute()上阻塞),但我还没有看到如何进行非阻塞调用的示例。 这是阻止代码: TSocket transport = new TSocket(“hive.example.com”, 10000); transport.setTimeout(999999999); TBinaryProtocol protocol = new TBinaryProtocol(transport); Client client = new ThriftHive.Client(protocol); transport.open(); client.execute(hql); // Omitted HQL List rows; while ((rows = client.fetchN(1000)) != null) { for (String row : rows) { // Do stuff with row } } transport.close(); 上面的代码缺少try / catch块来保持简短。 有没有人有任何想法如何进行异步调用? Hive / […]

使用Akka和Play Framework在Java中进行异步文件上载

我想以异步方式上传文件。 我正在使用Play Framework with Java。 我找到了许多异步上传文件的方法。 这些文件是多部分表单数据的一部分 1)Akka方式:将文件处理提供给演员 2)Play方式:使用Promise进行上传 3)Java方式:异步文件通道 我该怎么办? a)仅在播放控制器内使用Akka演员。 b)在返回Promise的play框架的异步方法中使用Akka actor 有了这个,akka的异步actor就在另一个Play的异步方法中,这可能是一种矫枉过正 如果我使用java而不是scala,最好的方法是什么?

异步servlet不是异步操作

我有一个servlet接受请求并写一个长响应。 响应处于循环中,该循环使用Thread.sleep(1000)来模拟长时间运行的操作。 我试图在这里设置一个异步请求,如代码所示。 但它没有用。 当我向servlet调用多个请求时,它们都是连续执行,而不是同时执行。 我究竟做错了什么? 我认为servlet应该是线程化的 – 每个服务器请求都会导致容器执行一个新线程(或者从池中重用一个)。 package test; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.AsyncContext; import javax.servlet.annotation.WebServlet; @WebServlet(urlPatterns={“/test”}, asyncSupported=true) public class TestServ extends HttpServlet { @Override public void doGet(HttpServletRequest rq, HttpServletResponse rs){ rs.setContentType(“text/plain”); rs.setHeader(“Access-Control-Allow-Origin”, “*”); AsyncContext asy = rq.startAsync(rq, rs); asy.start(new Client(asy)); } @Override public […]

使用ReactiveX for Java进行Http调用

我是ReactiveX for Java的新手,我有以下代码块来进行外部http调用,但它不是异步的。 我们使用的是rxjava 1.2和Java 1.8 private ResponseEntity callExternalUrl(String url, String json, HttpMethod method) { RestTemplate restTemplate; HttpEntity request; request = new HttpEntity(jsonContent, httpHeaders); return restTemplate.exchange(url, httpMethod, request, String.class); } 我在网上找到了以下代码块,但我无法理解它以及如何将其应用到我的代码库中。 private RxClient httpClient; public Observable fetchResult(String url, Func1 mapper) { return httpClient.target(url) .request() .rx() .get() .subscribeOn(Schedulers.io()) .map(mapper); }

Spring 3.2 DeferredResult – 如何设置错误响应的状态代码?

Spring Web 3.2附带了一个用于异步请求处理的DeferredResult类。 它有一个setErrorResult用于在出现问题时提供备用响应,但没有提供http错误代码的选项。 当然必须能够控制失败请求的http响应代码。我如何使用新的Spring api做到这一点?

Java Serializable,ObjectInputstream,非阻塞I / O.

我刚刚开始使用Java序列化,并且我不清楚如何在具有非阻塞I / O的场景中从源获取对象。 我能找到的所有文档建议使用ObjectInputStream是读取序列化对象的正确方法。 但是,正如我所提到的,我正在使用java.nio并执行非阻塞操作。 如果readObject()将阻塞,直到有新对象可用,这对我无济于事 总结..在使用Java NIO时如何进行序列化?