java async是什么(Java:什么叫做同步非阻塞IO呢)
大家好,感谢邀请,今天来为大家分享一下java async是什么的问题,以及和Java:什么叫做同步非阻塞IO呢的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
java运行环境指的是JDK吗
我当时用的好象是4.0,现在不知道是什么版本了,但是运行是这样的:
1、JDK环境
Java不仅提供了一个丰富的语言和运行环境,而且还提供了一个免费的Java开发工具集(Java Developers Kits,简称JDK)。编程人员和最终用户可以利用这些工具来开发java程序或调用Java内容。JDK包括以下工具: javac Java语言编译器,输出结果为Java字节码java Java字节码解释器javap Disassembeler: Java字节码分解程序,本程序返回Java程序的成员变量及方法等信息。 javaprof资源分析工具,用于分析Java程序在运行过程中调用了哪些资源,包括类和方法的调用次数和时间,以及各数据类型的内存使用情况等。 javah C代码处理工具,用于从Java类调用C++代码 java Applet Viewer小应用程序浏览工具,用于测试并运行Java小应用程序java Debugger API Java调试工具API Prototype Debugger Java调试工具原型
Java开发环境还包括Java类库(包括I/O类库、用户界面类库、网络类库等)和HotJava WWW浏览器。其中, HotJava浏览器提供了在WWW环境下运行Java代码的一个运行系统,而且还为WWW开发人员提供了一个Java开发框架。Java解释器是面向Java程序的一个独立运行系统,它可以一种稳定、高性能方式运行那些独立于平台的Java字节码, Java编译器则用于生成这些字节码。
1.1 Java程序的编译
Java程序的编译程序是javac.exe。javac命令将Java程序编译成字节码,然后你可用java解释器java命令来解释执行这些Java字节码。Java程序源码必须存放在后缀为.java的文件里。Java程序里的每一个类, javac都将生成与类相同名称但后缀为.class文件。编译器把.class文件放在.java文件的同一个目录里,除非你用了-d选项。当你引用到某些自己定义的类时,必须指明它们的存放目录,这就需要利用环境变量参数CLASSPATH。环境变量CLASSPATH是由一些被分号隔开的路径名组成。如果传递给javac编译器的源文件里引用到的类定义在本文件和传递的其它文件中找不到,则编译器会按CLASSPATH定义的路径来搜索。例如:
CLASSPATH=.;C:javaclasses则编译器先搜索当前目录,如果没搜索到,则继续搜索C:javaclasses目录。注意,系统总是将系统类的目录缺省地加在CLASSPATH后面,除非你用-classpath选项来编译。javac_g是一个用于调试的未优化的编译器,功能与用法和javac一样。 javac的用法如下:
javac [-g][-O][-debug][-depend][-nowarn][-verbose][-classpath path][-nowrite][-d dir] file.java...
以下是每个选项的解释。
选项解释:
-classpath path定义javac搜索类的路径。它将覆盖缺省的CLASSPATH环境变量的设置。路径是由一些由分号隔开的路径名组成,一般格式如下:.;<your_path>例如:.;C:javadocclasses;C:oolsjavaclasses表示编译器遇到一个新类,它先在本文件中查找它的定义,如果没有,则在本文件所处目录下其它文件中查找它的定义,如果还没有,则继续搜索C:javadocclasses目录中的所有文件,以此类推。
-d directory指明类层次的根目录,格式如下:
javac-d<my_dir> MyProgram.java
这样将MyProgram.java程序里的生产的.class文件存放在my_dir目录里.
-g带调试信息编译,调试信息包括行号与使用java调试工具时用到的局部变量信息。如果编译没有加上-O优化选项,只包含行号信息。
-nowarn关闭警告信息,编译器将不显示任何警告信息。
-O优化编译static, final, private函数,注意你的类文件可能更大。
-verbose
让编译器与解释器显示被编译的源文件名和被加载的类名。
环境变量
CLASSPATH用来提供给系统搜索用户定义的类的缺省路径。各路径由分号隔开,例如:
.;C:javadocclasses;C:oolsjavaclasses表示编译器遇到一个新类,它先在本文件中查找它的定义,如果没有,则在本文件所处目录下其它文件中查找它的定义,如果还没有,则继续搜索C:javadocclasses目录中的所有文件,以此类推。
1.Java程序的调试使用java调试器
jdb导游
在早期前Betal版的Java调试器jdb是命令行形式的,如用Sun公司的dbx调试器。用jdb来调试Java应用程序,在调试之前,要确证你的应用程序是带标志-g编译的。例如: javac-g HelloWorld.java
help命令将显示jdb里的可用命令列表。
>help<命令列表> threads [threadgroup]--列出线程 thread<thread id>--设置缺省线程 Suspend [threads id(s)]--将线程挂起 resume [thread id(s)]--重新启动线程 where [id]|a1|--打印线程的堆栈 threadgroups--列出线程组号 threadgroup<name>--设置当前线程组 print<id> [id(s)]--打印对象或域 dump<id> [id(s)]--打印所有对象信息locals--打印当前堆栈所有局部变量 classes--列出当前所知的类 methods<class id>--列出一个类的成员函数stop in<classid>.<method>--在一个成员函数里设置断点stop at<class.id>:<line>--在一行里设置断点 up [n frames]--在线程堆栈里往上移 down [n frames]--在线程堆栈里往下移 clear<class id>:<line>--清除一个断点 step--执行当前行 cont--从断点处继续执行 catch<class.id>--为指定的情况中断 ignor<class.id>--为指定的情况忽略 list [line number]--打印源程序 use [Sourcefile path]--显示或改变源路径 memeory--报告内存使用情况 load classname--加载Java类以便调试 run<args>--开始执行加载的类!!--重复以上的命令 help(?)--列出所有的命令 exit( or quit)--离开调试器
1.3 Java程序的执行
java- java语言解释器 java命令解释java字节码
语法: java [ options ] classname<args> java_g [ options ] classname<args>
描述: java命令由java编译器javac输出的Java字节码。
classname参数是要执行的类名称。注意任意在类名称后的参数都将传递给要执行类的main函数。
java执行完main函数后退出,除非main函数创建了一个或多个线程。如果main函数创建了其它线程, java总是等到最后一个线程退出才退出。
选项:
-cs,-checksource当一个编译过的类调入时,这个选项将比较字节码更改时间与源文件更改时间,如果源文件更改时间靠后,则重新编译此类并调入此新类。
-classpath path定义javac搜索类的路径。它将覆盖缺省的CLASSPATH环境变量的设置,路径是由一些由分号隔开的路径名组成,一般格式如下:.;<your_path>例如:.;C:javadocclasses;C:oolsjavaclasses表示解释器遇到一个新类,它先在本文件中查找它的定义,如果没有,则在本文件所处目录下其它文件中查找它定义,如果还没有,则继续搜索C:javadocclasses目录中的所有文件,以此类推。
-mx x设置最大内存分配池,大小为x, x必须大于1000bytes。缺省为16兆。
-ms x设置垃圾回收堆的大小为x, x必须大于1000bytes。缺省为1兆。
-noasyncgc关闭异步垃圾回收功能。此选项打开后,除非显式调用或程序内存溢出,垃圾内存都不回收。本选项不打开时,垃圾回收线程与其它线程异步同时执行。
-ss x每个Java线程有两个堆栈,一个是java代码堆栈,一个是C代码堆栈。-ss选项将线程里C代码用的堆栈设置成最大为x。
-oss x每个Java线程有两个堆栈,一个是java代码堆栈,一个是C代码堆栈。-oss选项将线程里java代码用的堆栈设置成最大为x。
-v,-verbose让java解释器在每一个类被调入时,在标准输出打印相应信息。
环境变量
CLASSPATH用来提供给系统搜索用户定义的类的缺省路径。各路径由分号隔开,例如:
.;C:javadocclasses;C:oolsjavaclasses表示解释器遇到一个新类,它先在本文件中查找它的定义,如果没有,则在本文件所处目录下其它文件中查找它的定义,如果还没有,则继续搜索C:javadocclasses目录中的所有文件,以此类推。
1.2 JWS环境
Java WorkShop是SUN公司的一个新产品,它是一个集成的java语言开发环境,它包括以下工具:
| Portfolio和Project管理器|源文件编辑器| Build管理工具|调试器|项目测试|在线超文本连接到帮助文件
这些工具在Java WorkShop的第一页都有类似Web页面的超级连接,如图:
注意, Java WorkShop采用的是当今浏览器的界面风格,你想作什么,只需找到相应的超级连接就可以了。具体编译及调试功能是用嵌嵌到HTML文档里的Applet实现的,因此,对习惯于用internet浏览方式的用户来说,这种界面很容易接受。
Java:什么叫做同步非阻塞IO呢
首先这个不是JAVA特有的概念。
同步非阻塞:同步指的是调用者程序需要等待被调用逻辑执行完毕才可以继续向下执行,阻塞指的是被调用程序逻辑不能立即返回,需要调用程序等待。“非阻塞”体现在I/O函数立即返回给调用者一个结果而不论I/O中是否含有数据。主程序需要根据每次调用I/O函数返回的值判断数据是否已经准备OK,如果可以被处理了才继续往下进行处理。(因此“其它的操作”,可以是不断轮询调用的IO函数,也可以做其它任何事情(比如我判断当前没有数据,就不处理数据了,随便干个别的事情完事--!))
楼主之所以有疑问,是因为楼主的案例看起来都得等待IO完成才可以继续处理吧,看起来都是“阻塞”了主程序的数据处理逻辑(没有数据后续还做什么处理是吧),但事实是你可以不处理数据,做其它任何事情,因此上述IO并没有阻塞你的程序执行(IO函数没有阻塞调用者程序),只是在数据处理的逻辑上阻塞了(逻辑阻塞)。
总:楼主这个所谓“其他的操作“呢?在逻辑处理上应该是写一个轮训判断IO的数据是否OK,每一次轮训相对于是做了一个"其它操作",因为上一个时刻的函数调用并没有阻塞后一个时刻的函数调用。(注意理解“逻辑阻塞”与“程序阻塞”)
备注:
推荐阅读unixBIO,NIO,AIO这是三个是本质,javaNetty即其中的I/O多路复用模型实现;(B: Block阻塞的含义, N:Non-Block, A: Async)
之所以有这么多复杂的模型,实际上都是为了节省计算机的资源,按细了说比如CPU,比如内存。其它角度看,线程也是一种比较奢侈的资源。
android AsyncHttpClient 的作用好处
不建议使用AsyncHttpClient
因为这种方式,是封装好了,有发起请求的,有更新界面的
搞java的都知道MVC的开发模式
通常情况下,我们会将发请求这部分封装好
然后通过某个方法来解析数据再将数据返回给Activity来更新界面
而AsyncHttpClient的话,你只能在每个需要访问远程的Activity里写这些东西
因为它已经封装好请求数据和更新界面
java async是什么和Java:什么叫做同步非阻塞IO呢的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!