- 浏览: 218573 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
flychao88:
nothingismao 写道623deyingxiong 写 ...
nio与io的比较 -
李冰冰:
如果NIO单个线程处理业务逻辑,那么如果这个业务逻辑非常耗时, ...
nio与io的比较 -
wj_126mail:
IO是一个连接就创建一个线程来处理;NIO是一个线程在处理所有 ...
nio与io的比较 -
nothingismao:
623deyingxiong 写道wwj85523 写道 看完 ...
nio与io的比较 -
623deyingxiong:
wwj85523 写道
看完后我迷糊了,
IO一样可以一个线 ...
nio与io的比较
控制器,负责与客户端通讯,并且控制着另外12家线程的
12个被控制的线程
package com.amid.entryexit; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; public class Controller extends Thread { private Socket socket; private StoreOneQuote[] threads; private BufferedReader in; private PrintWriter out; private String regEx; public Controller(Socket socket, StoreOneQuote[] threads) throws IOException { regEx = "END|((STOP|START) [0-9]+)"; this.socket = socket; this.threads = threads; in = new BufferedReader(new InputStreamReader(socket.getInputStream())); //auto-flush out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket .getOutputStream())), true); } public void run() { String request = ""; String response = ""; try { while (!"END".equals(request)) { request = in.readLine(); response = request; if (request.matches(regEx)) { if ("END".equals(request)) {// end the session between the // server and the client response = "OK, end this session, byebye"; } else {// STOP || START String[] order = new String[2]; order = request.split(" "); int companyNumber = new Integer(order[1]); if (companyNumber < threads.length && companyNumber >= 0) { if ("STOP".equals(order[0])) { response = threads[companyNumber].block(); } else if ("START".equals(order[0])) { response = threads[companyNumber].wakeUp(); } } else { response = "Error: Parameter Out Of Bound"; } } } else { response = "Error: Unknown Request"; } System.out.println("Client's Request: " + request); out.println(response); }// End of while } catch (IOException e) { e.printStackTrace(); } finally { try { socket.close(); } catch (IOException e) { } } } }
12个被控制的线程
package com.amid.entryexit; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Random; public class StoreOneQuote extends Thread { private Connection conn = null; private int sleepTime = 10; private boolean flag = false;//not wait(); public StoreOneQuote(Connection conn, int sleepTime) { this.sleepTime = sleepTime; this.conn = conn; } private synchronized void getValuesFromAPI(ArrayList list){ if(flag){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } Random r = new Random(); list.add(new Integer(Thread.currentThread().getName())); list.add(r.nextInt(6)); list.add(r.nextInt(2)); list.add(r.nextInt(100)); list.add(r.nextFloat() + 1); } public synchronized String wakeUp(){ if(flag == true){ flag = false; this.notifyAll(); return "OK: The Thread had run successfully."; } else { return "WARNING: The Thread is running now."; } } /** * @return true means ok * false means a warn */ public String block(){ if(flag == true){ return "WARNING: The Thread had already been locked."; } else { flag = true; return "OK: The Thread had been blocked successfully."; } } private String getDate(){ Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(now); } public void run() { while (!Thread.currentThread().isInterrupted()) {//legacy, no use String sql = ""; sql += "INSERT INTO quote (company_id, product_id, quote_type, quote_amount, quote_price, quote_time) "; sql += "VALUES (?, ?, ?, ?, ?, ?); "; ArrayList list = new ArrayList(); getValuesFromAPI(list); try { PreparedStatement pstmt = conn.prepareStatement(sql); for (int i = 1; i < list.size(); i++) { pstmt.setInt(i, (Integer)list.get(i - 1)); } pstmt.setFloat(5, (Float)list.get(4)); pstmt.setString(6, getDate()); if(new Random().nextBoolean()){ pstmt.execute(); System.out.println(Thread.currentThread().getName()); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { Thread.sleep(sleepTime); } catch (InterruptedException e) { // TODO Auto-generated catch block Thread.currentThread().interrupt(); e.printStackTrace(); } } } }
package com.amid.entryexit; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class StoreQuote { Connection conn = null; String url = "jdbc:mysql://211.94.206.60:3306/entryexit_v15"; String userName = "entryexit"; String password = "entryexit"; int sleepTime = 4000; int companyAmount = 10; int serverPort = 7999; int socketTimeOut = 60000; private void setProperties() { Properties prop = new Properties(); try { prop.load(new FileInputStream(System.getProperty("user.dir") + "\\app.properties")); url = prop.getProperty("url"); userName = prop.getProperty("userName"); password = prop.getProperty("password"); sleepTime = new Integer(prop.getProperty("sleepTime")); companyAmount = new Integer(prop.getProperty("companyAmount")); serverPort = new Integer(prop.getProperty("serverPort")); socketTimeOut = new Integer(prop.getProperty("socketTimeOut")); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private void getReady4DB() { try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, userName, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } private StoreOneQuote[] getReady4TH(int threadAmount) { StoreOneQuote[] threads = new StoreOneQuote[threadAmount]; for (int i = 0; i < threadAmount; i++) { threads[i] = new StoreOneQuote(conn, sleepTime); threads[i].setName(Integer.toString(i)); threads[i].start(); } return threads; } public void monitorThread(StoreOneQuote[] threads, int serverPort) { ServerSocket server = null; Socket socket = null; try { server = new ServerSocket(serverPort); while (true) { socket = server.accept(); socket.setSoTimeout(socketTimeOut); Controller ctrl = new Controller(socket, threads); ctrl.start(); } } catch (IOException e) { try { if (!server.isClosed()) server.close(); if (!socket.isClosed()) socket.close(); } catch (IOException ex) { ex.printStackTrace(); } e.printStackTrace(); } } private void startUp() { setProperties(); getReady4DB(); StoreOneQuote[] threads = getReady4TH(companyAmount); monitorThread(threads, serverPort); } public static void main(String[] args) { StoreQuote sq = new StoreQuote(); sq.startUp(); } private void closeConn() { try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } }
发表评论
-
ant build.xml例子
2010-01-10 20:16 2509<?xml version="1.0" ... -
避免内存泄露专题
2009-12-17 16:19 1233For Java: 1.限制使用单例模式;单例模式是引发mem ... -
万恶的inner class, memory leak的源头之一
2009-12-17 15:35 1325非static inner class隐式的含有一个引用指向o ... -
resolve maven [Request to merge when 'filtering' is not identical]. issue
2009-11-06 11:18 2708mvn org.apache.maven.plugins:ma ... -
an example of cloneable
2009-10-10 09:43 1079The following code describes ho ... -
jvm 远程debug
2009-04-17 10:01 1149-Xdebug -Xrunjdwp:transport=dt_ ... -
java dynamic proxy
2008-11-21 20:45 1133package proxy.cxz.org; impor ... -
serializable例子一则
2008-11-15 21:13 1054实现Serializable接口,编写地定义的针对transi ... -
jmx添加naming service以及一个rmi 监听方式
2008-11-11 15:22 2632ObjectName namingName = new ... -
指定编码器、解码器,并且利用ByteBuffer读写文件
2008-11-04 20:48 2687指定编码器、解码器,并且利用ByteBuffer读写文件。 做 ... -
java 网络编程探讨
2008-11-02 19:30 2096毕业有一年多了,大学的时候上过网络课程,但我一直认为:网络技术 ... -
Differences Between notify() and notifyAll()
2008-08-08 21:20 1051package com.cxz.currency.test; ... -
一套基于http的聊天c/s结构工具(除了网页tomcat还能做什么)
2008-08-08 11:51 4048在我的认识当中以前一直有一种误区认为:tomcat=web。在 ... -
jdk1.6中添加的future
2008-07-18 13:59 1327摘自:http://caterpillar.onlyfun.n ... -
模拟jdk1.5中reentrantlock
2008-07-18 13:15 1199选自:java线程2e。 类似于jdk1.5中的reentra ... -
java线程2e中写得相当花哨的thread例子!
2008-07-14 16:53 1782太鲜灵儿了! package com.cxz.tools; ... -
j2se中实现jndi的控制、管理
2008-07-01 19:34 1169jndi例子一则,转载自网络。利用一个container实现了 ... -
jmx控制tomcat
2008-07-01 09:22 5048以前所作的一切应用程序基本上都是由tomcat容器,控制web ... -
jmx例子一则
2008-06-30 07:32 2893很简单的一个hellojmx的例子。其中实现了:标准bean、 ... -
nio与io的比较
2008-06-21 17:31 14945nio是new io的简称,从jdk1.4就被引入了。现在的j ...
相关推荐
AMID,全称为Asynchronous Module Definition,是一种在JavaScript中实现模块化编程的规范。它主要解决了JavaScript在浏览器环境中缺少内置模块系统的问题,使得代码组织更加有序,可维护性更强。AMID规范允许开发者...
2. 芯片短缺影响:半导体供应不足是导致制造业生产下降的一个关键因素。由于全球芯片短缺,特别是汽车和零部件制造领域,产量下降了7.2%。这表明半导体供应链的问题继续困扰着工业活动,尤其是在汽车行业。 3. 飓风...
图形用户界面 AMID 休息接口的前端 在apache的httpd.conf中启动AMID并配置反向代理 埃斯: ProxyPass /mongo ProxyPassReverse /mongo
总结来说,第一个程序展示了如何在不完全合并两个已排序数组的情况下找到它们的中位数,利用了二分查找的思想和边界调整策略,这是一种高效的解决方案。第二个程序由于信息不足,无法进行详细的解释和分析。
Synthese eines hexanuklearen Calcium-Phosphor-Käfigs über heteroleptische Calcium-amid-phosphanid-Vorstufen Synthese eines hexanuklearen Calcium±Phosphor-KaÈfigs uÈ ber heteroleptische Calcium-...
3. **终止条件**: 当两个数组都只剩下两个元素时,退出循环。 4. **输出结果**: 输出这两个剩余区间中的较大值和较小值。 #### 五、代码示例 ```java public class SearchMid { static void SearchMid(int[] a, ...
标题大小写是指每个单词的首字母大写,但某些小单词(如冠词和简短介词)除外。 是一篇很好的文章,解释了为什么您应该考虑使用它。 排除大写的单词的完整列表 a, abaft, about, above, afore, after, along, amid, ...
在对AMID算法进行改进时,研究者们提出了一种结合丢包率和接收缓冲区使用情况的改进算法,目的在于在网络状况良好时能充分使用带宽,而在网络状况不佳时则能够有效降低丢包率,改善视频传输的质量。 实验结果表明,...
Silber(I)-di(arensulfonyl)amide und ein Silber(I)-(arensulfonyl)(alkansulfonyl)amid: Von Bändern zu lamellaren Schichten mit kurzen Zwischenschichtkontakten C-H[hellip]Hal-C oder C-Br[hellip]Br-C ...
程序首先定义了一个名为`rip`的结构体,包含目的网络地址数组`amid`、子网掩码数组`subnet`、下一跳地址字符数组`next`以及辅助的`sub`数组。`main()`函数中初始化了一个`rip`结构体实例`r`,包含了四个路由条目。 ...
大数据开发编程语言,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为...
这个单元以“Fresh Start”为主题,引导学生思考大学生活的意义和可能性,同时也为他们提供了一个审视自我、规划未来的机会。 在课程的开头,引用了W.E.B. DuBois的话:“And yet not a dream, but a mighty ...
- amid/amidst和among:用于表示在群体中,amidst更强调包围感。 三、介词的用法举例: - 时间:The bus will be here in ten minutes.(公交车十分钟后到。) - 地点:He works at Peking University.(他在北京...
诗的第一部分描绘了一个老年场景:主人公在炉火旁昏昏欲睡,此时他/她被邀请翻开一本书,回忆起年轻时的自己。"When you are old and grey and full of sleep" 这句诗,形象地刻画了衰老的外貌和状态,暗示着时间的...
- 报告中提到在特定情况下(与第三个目的网络匹配时),下一跳被输出两次,这可能是由于`switch`语句条件判断的问题,需要调试和完善代码逻辑。 4. 实习体会: - 实习过程不仅提升了C语言编程能力,还加深了对...
总之,实现基于Asterisk的多账户配置是一项涉及多个层面的工作,需要深入理解Asterisk的架构和配置机制,并确保在安全性和性能上达到预期标准。通过灵活地利用Asterisk的功能,可以创建出满足不同需求的云呼平台。
AD1268A是一款由美国AMID公司设计与制造的LCD驱动器芯片。该芯片因其低廉的价格和可靠的性能,在市场中占据了一席之地。它可以驱动128段的LCD,并且提供了丰富的配置选项以适应不同的应用需求。 #### 二、技术参数 ...
在友谊中,拥有一个真正的朋友本身就是一种特权。 6. pilgrim - 朝圣者;比喻为寻求真理和自我发现的人,朋友可能在人生的旅程中扮演这样的角色。 7. glowing - 光辉的;形容一种积极的、充满活力的友谊状态。 8. ...
重点在于区分每一个“wish”的含义:第一个“wish”是动词,意为“希望”,后面的则是名词,意为“愿望”。同时,“witch”与“wish”发音相近,练习时需注意区分。 ### 3. I scream, you scream, we all scream ...
文档提到了“2021 地产科技企业50强 -kpmg.pdf”,这表明该文件很可能涉及了一个由知名咨询公司毕马威(KPMG)组织的关于地产科技企业的评选活动。虽然没有具体内容提供,但可以推测评选活动旨在识别和表彰在地产科技...