java异步线程java异步线程处理

2024-07-21 07:02:54 浏览

从主线程 new Thread 开一个支线程

java异步线程java异步线程处理

在支线程中 用delegate (委托)执行要操作的方法,

用委托BeginInvoke执行改委托,得到一个IAsyncResult的结果

并一直判断 IAsyncResult的IsCompleted(表示异步是否执行完成)

若执行完成,用EndInvoke 得到异步操作的结果,再用主线程上的Invoke 执行显示结果

(应为主线程,只做了一件事,开了一支线程。异步调用 和等待异步的结束,都是支线程做的,这样主线程不会假死,当主线程要显示结果了,直接操作是又问题的,应为跨了线程!只能用Invoke )

JavaScript 异步表示async,指:代码执行不按顺序,‘跳过’执行,待其他某些代码执行完后,再来执行,称为“异步”。javascript同步表示sync,指:代码依次执行。就是这么回事javascript所谓的“线程”,就是这样一种概念这种情况容易出现在 ajax 当中,因为ajax最可能,也最多用到async 或者 sync的概念属性。

最典型的应用比如tomcat,tomcat内部采用的就是多线程,上百个客户端访问同一个web应用,tomcat接入后都是把后续的处理扔给一个新的线程来处理,这个新的线程最后调用到我们的servlet程序,比如doGet或者doPost方法。

如果不采用多线程机制,上百个人同时访问一个web应用的时候,tomcat就得排队串行处理了,那样客户端根本是无法忍受那种访问速度的。

还有就是需要异步处理的时候,需要使用多线程。比如taska和taskb要并行处理,单个线程只能串行处理,先做完taska然后再做taskb。如果想要多个task同时执行的话,就必须为每个task分配一个线程,然后通过java虚拟机的线程调度,来同时执行多个任务。比如你的cpu是多核心的话,就可以让一个CPU执行一个线程。如果只有一个CPU的话,底层是按照分时复用的原则,各个线程按照时间片来获得CPU资源。

使用多线程是为了提高程序运行的效率。假如有一个程序,要求用户输入多个算式,计算出结果,并分别打印到屏幕上。如果用户一直没有输入,那么无法计算,更无法打印。如果用户输入了,必须要全部输入完,才能计算出结果,再打印到屏幕。

使用线程的话,一个线程用来等待用户输入,一个用来计算结果,一个用来打印。用户在输入算式3的时候,计算线程在计算算式2,打印线程在打印算式1,三个线程同时进行,减少了等待,这样就提高了运行效率

SocketChannel属于nio,支持异步非阻塞连接.当然Socket也可以自己来实现非阻塞连接.

一般来说使用SocketChannel会有更好的性能(Socket实际应该比SocketChannel更高效,不过一般使用到最后,由于使用者设计等原因,效率反而比直接使用SocketChannel低)

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。