像NodeJS一样写Java(二)

在上篇文章中像NodeJS一样写Java(一)中,我们已经了解了一个简单的单线程异步框架的基本构成和编写方式。 下面,我们需要聊的是有关这个框架的一些改进,具体的代码可以在我的GITHUB上找到,地址为:https://github.com/MikeCoder/NodeJava,相较于之前的那个,做的改进有下: 添加了任务调度模块 完善了任务结束之后,资源回收问题 关于任务调度模块 我添加了TaskDispatcher接口,接口的定义如下: public interface TaskDispatcher { // getTask() Method must be blocking when empty public Task…

像NodeJS一样写Java(一)

六月过了将近2个星期了,马上要期末考试了,就没有多少心情去写一些自己感兴趣的东西了.这个模型是我很早就想去做的,因为网上吹捧NodeJS很过分.貌似到了膜拜的境地,虽然对JavaScript并不是很感冒,但作为圈子里的人,也是要看一下的.所以就有了前一篇文章《初识NodeJS》 其中,我就对NodeJS的事件机制有了兴趣,因为从来没有想过代码可以这样写,完全基于事件进行编写,虽然之前在写SWING,AWT等程序的时候,会有事件概念,但像NodeJS一样完全架构于事件只上的代码,确实没有编写过。 比如说,我们常见的读取文件的代码,如果是Java顺序读写,我们会这么写: public static void main(String[] args) throws IOException { File file = new File(“info.txt”); BufferedReader reader = new…

初识NodeJS

初识NodeJS,印象最深的莫过于他的事件机制,和回调函数,他的读取文件的代码段如下: var fs = require(‘fs’); fs.readFile(‘file.txt’, ‘utf-8’, function(err, data) { if(err) console.error(…); else console.log(…); }); console.log(…); 这边好玩的是,他的代码并不是顺序执行的,代码中的function,并不是在readFile之后立刻执行,而是会先执行console.log(…)等到文件准备好之后,系统会触发一个文件准备好的事件,然后自动调用注册的回调函数进行执行.这一点很不同于Java中经典的BIO,代码会阻塞在Read上. 单线程事件驱动异步模型 这不得不说下NodeJS的单线程事件驱动的编程方式了.在旧版的NodeJS中并没有多线程的概念,一个程序都基于一个线程.从而减少多线程上下文切换带来的开销.但这会带来一个好玩的问题,比如,会写出反人类的,不可维护的代码.如一个简单的在数据库中删除数据,插入数据查询数据,更新数据这样一个串行的操作,会带来这样一段蛋疼的代码: var…