服务器端的完整实现  服务器端的完整实现代码如下:package com.andrew;import java.io.dataoutputstream">
 
网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  java 5.0 多线程编程实践     
  文章作者:未知  文章来源:水木森林  
  查看:119次  录入:管理员--2007-11-16  
  ad_qqread_mid_big">
  服务器端的完整实现

  服务器端的完整实现代码如下:

package com.andrew;

import java.io.dataoutputstream;
import java.io.ioexception;
import java.io.serializable;
import java.net.serversocket;
import java.net.socket;
import java.util.concurrent.arrayblockingqueue;
import java.util.concurrent.blockingqueue;
import java.util.concurrent.callable;
import java.util.concurrent.executionexception;
import java.util.concurrent.executorservice;
import java.util.concurrent.executors;
import java.util.concurrent.future;
import java.util.concurrent.rejectedexecutionhandler;
import java.util.concurrent.threadpoolexecutor;
import java.util.concurrent.timeunit;
import java.util.concurrent.locks.reentrantlock;

public class server {
 private static int producetasksleeptime = 100;
 private static int consumetasksleeptime = 1200;
 private static int producetaskmaxnumber = 100;
 private static final int core_pool_size = 2;
 private static final int max_pool_size = 100;
 private static final int keepalive_time = 3;
 private static final int queue_capacity = (core_pool_size + max_pool_size) / 2;
 private static final timeunit time_unit = timeunit.seconds;
 private static final string host = "127.0.0.1";
 private static final int port = 19527;
 private blockingqueue<runnable> workqueue = new arrayblockingqueue<runnable>(queue_capacity);
 //private threadpoolexecutor serverthreadpool = null;
 private executorservice pool = null;
 private rejectedexecutionhandler rejectedexecutionhandler = new threadpoolexecutor.discardoldestpolicy();
 private serversocket serverlistensocket = null;
 private int times = 5;
 public void start() {
  // you can also init thread pool in this way.
  /*serverthreadpool = new threadpoolexecutor(core_pool_size,
  max_pool_size, keepalive_time, time_unit, workqueue,
  rejectedexecutionhandler);*/
  pool = executors.newfixedthreadpool(10);
  try {
   serverlistensocket = new serversocket(port);
   serverlistensocket.setreuseaddress(true);

   system.out.println("i'm listening");
   while (times-- > 0) {
    socket socket = serverlistensocket.accept();
    string welcomestring = "hello";
    //serverthreadpool.execute(new servicethread(socket, welcomestring));
    pool.execute(new servicethread(socket));
   }
  } catch (ioexception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  }
  cleanup();
 }

 public void cleanup() {
  if (null != serverlistensocket) {
   try {
    serverlistensocket.close();
   } catch (ioexception e) {
    // todo auto-generated catch block
    e.printstacktrace();
   }
  }
  //serverthreadpool.shutdown();
  pool.shutdown();
 }

 public static void main(string args[]) {
  server server = new server();
  server.start();
 }
}

class servicethread implements runnable, serializable {
 private static final long serialversionuid = 0;
 private socket connectedsocket = null;
 private string hellostring = null;
 private static int count = 0;
 private static reentrantlock lock = new reentrantlock();

 servicethread(socket socket) {
  connectedsocket = socket;
 }

 public void run() {
  increasecount();
  int curcount = getcount();
  hellostring = "hello, id = " + curcount + "/r/n";

  executorservice executor = executors.newsinglethreadexecutor();
  future<string> future = executor.submit(new timeconsumingtask());

  dataoutputstream dos = null;
  try {
   dos = new dataoutputstream(connectedsocket.getoutputstream());
   dos.write(hellostring.getbytes());
   try {
    dos.write("let's do soemthing other./r/n".getbytes());
    string result = future.get();
    dos.write(result.getbytes());
   } catch (interruptedexception e) {
    e.printstacktrace();
   } catch (executionexception e) {
    e.printstacktrace();
   }
  } catch (ioexception e) {
   // todo auto-generated catch block
   e.printstacktrace();
  } finally {
   if (null != connectedsocket) {
    try {
     connectedsocket.close();
    } catch (ioexception e) {
     // todo auto-generated catch block
     e.printstacktrace();
    }
   }
   if (null != dos) {
    try {
     dos.close();
    } catch (ioexception e) {
     // todo auto-generated catch block
     e.printstacktrace();
    }
   }
   executor.shutdown();
  }
 }

 private int getcount() {
  int ret = 0;
  try {
   lock.lock();
   ret = count;
  } finally {
   lock.unlock();
  }
  return ret;
 }

 private void increasecount() {
  try {
   lock.lock();
   ++count;
  } finally {
   lock.unlock();
  }
 }
}

class timeconsumingtask implements callable<string> {
 public string call() throws exception {
  system.out.println("it's a time-consuming task, you'd better retrieve your result in the furture");
  return "ok, here's the result: it takes me lots of time to produce this result";
 }

}

  运行程序

  运行服务端,客户端只需使用telnet 127.0.0.1 19527 即可看到信息如下:

java 5.0 多线程编程实践(图一)
>>>更多专题请看java的类  java网络  java线程专题
上一页 1 2 
相关内容:服务器  telnet  os  java  ie  
【收藏此页】【大 中 小】【打印】【关闭】
上一篇:java数据对象技术jdo初步概览
下一篇:为web应用建立基于jmx的管理系统


10万个软件免费高速下载
教育教学 安全相关 游戏娱乐 源码下载 编程开发 数码软件 其它类别
网络软件 联络聊天 系统工具 媒体工具 图形图像 应用软件 行业软件
·基于vb.net的多线程编程实现
·漫谈c++ builder多线程编程技术
·java多线程编程初步
·有趣的多线程编程(1)——一个简单
·有趣的多线程编程(2)——线程中的
·c#多线程编程实例实战
·c#多线程编程实例实战(1)
·c++builder的多线程编程中一些体会
·java多线程编程基础之线程对象
·例程分析多线程编程
 
·接口和抽象类的定义方式举例说明
·用maven制作java项目发行包
·java 基础入门 pom.xml 元素描述
·用jbuilder2007开发扩展jsf标签的插
·抽象类对象类和对象包装类
·使用java实现在文件中添加字符串
·instanceof和回调概念
·java变量的赋值与传递
·java se6调用java编译器的两种新方法
·weblogic运用db的java控件访问数据库
 
 
上一篇: java智能卡基础篇——未来java平台的新发展    下一篇: 为web应用建立基于jmx的管理系统
  相关文档
在java中解读压缩文件 11-17
创建通过 wdo访问数据的 jsf 应用程序(5) 11-17
抽象类和方法 11-17
java反射技术(二) 11-17
写java程序最容易犯的21种错误例析 11-17
java初学者讲堂:javabean简易入门 11-17
java程序员认证模拟题及详细分析 11-17
转scjp第一站的首页内容 11-17
搭建linux下java开发环境 11-17
java从入门到精通之方法篇 11-17
使用socket通道读取web页面 11-17
java 基本语法(一)——数据类型 11-17
新手入门:初学者搭建j2me移动开发平台 11-16
java unicode转义字符的小小研究 11-17
java嵌入式开发讲座 第三讲 11-17
实例讲解在jsp开发中的对象和范围属性 11-16
使用hibernate进行对象的关系映射 11-17
java单体测试工具cactus使用指南 11-17
怎样拿下sun公司的scjp认证? 11-17
effective java读书笔记之四. 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息