2 be proud Be_Proud 于 2016.03.10 13:39 提问

关于java并发编程,完整代码

谁能给个完整的 、有关java 并发编程的例子?多个客户端向服务器传输数据

3个回答

caozhy
caozhy   Ds   Rxr 2016.03.10 14:25
已采纳
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.10 13:46

最简单的就是Java Web项目啊,Tomcat处理请求就是用的多线程处理的。

Be_Proud
Be_Proud 并不是Java Web
2 年多之前 回复
lx624909677
lx624909677   Ds   Rxr 2016.03.10 23:00
 import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apache.log4j.Logger;
import Smart.Java.Com.Constant;
import Smart.Java.Com.StringHandler;
//c:\jdk1.5\bin\java -classpath c:\jdk1.5 SocketServerThread
public class SocketServer {
 private static Logger logger = Logger.getLogger(SocketServer.class);

 private ServerSocket serverSocket;
 private ExecutorService executorService;//线程池
    private final int POOL_SIZE=10;//单个CPU线程池大小
 public SocketServer(){
  try
  {
   serverSocket = new ServerSocket(Constant.SocketPort);
   executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);
   System.out.println("监听服务器启动,端口号:" + Constant.SocketPort);
  }
  catch(Exception e)
  {
   String s = "监听服务器启动 失败,可能是端口" + Constant.SocketPort + "已被占用,请重置端口" + Constant.SocketPort + "后重试";
   logger.error(e.getMessage() + "<br />" + s);
   //System.out.println();
  }
 }
 public void service() {
  try
  {
   while (true) {
    Socket clientSocket=null;
    try {
     // 接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
     clientSocket = serverSocket.accept();
     executorService.execute(new SocketHandler(clientSocket));
    } catch (Exception e) {
     logger.error(StringHandler.GetException(e));
     e.printStackTrace();
    }
   }
  }
  catch (Exception e1) {
   //logger.error(StringHandler.GetException(e1));
   //e1.printStackTrace();
  }
  finally
  {
   if (serverSocket != null)
   {
    try
    {
     serverSocket.close();
    }catch(Exception ex1){}
   }
  }
 }
 public static void main(String[] args) throws Exception {
  try
  {
   new SocketServer().service();
  }
  catch(Exception ex)
  {
   logger.error(StringHandler.GetException(ex));
   ex.printStackTrace();
  }
 }
} 
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import org.apache.log4j.Logger;
import Smart.Java.Com.Constant;
import Smart.Java.Com.MonitorHandler;
import Smart.Java.Com.StringHandler;
//public class SocketHandler implements Runnable {
public class SocketHandler implements Runnable{
 private static Logger logger = Logger.getLogger(SocketHandler.class);

 private Socket socket;
 public SocketHandler(Socket socket) {
  this.socket = socket;

//  run();
 }
 private PrintWriter getWriter(Socket socket) throws Exception {
  OutputStream socketOut = socket.getOutputStream();
  return new PrintWriter(socketOut, true);
 }
// private BufferedReader getReader(Socket socket) throws Exception {
//  
// }


 private String GetInfoByAction(String _args)
 {
  try
  {
   String returnStr = "";
   String[] ssArgs = _args.split(";");
   String _productSeries = ssArgs[0];
   String _ciKey = ssArgs[1];
   if (_productSeries.equals("") || _ciKey.equals(""))
   {
    return "0";
   }
   String _ip = ssArgs[2];
   String _port = ssArgs[3];
   String _username = "";
   String _pwd = "";

   if (ssArgs.length > 4)
   {
    _username = ssArgs[4];
    if (ssArgs.length > 5)
    {
     _pwd = ssArgs[5];
    }
   }

   MonitorHandler monitor = new MonitorHandler(_productSeries, _ciKey, _ip, _port, _username, _pwd);

   returnStr = monitor.GetMonitorInfo();

   return returnStr;
  }
  catch (Exception e)
  {
   e.printStackTrace();
   logger.error(StringHandler.GetException(e));
   return Constant.ErrorNumber_UnkownException;
  }
 }

 private static String GetCurrentTime()
 {
  try
  {
   Calendar cal = Calendar.getInstance();   
   SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
   String time = formatter.format(cal.getTime());  
   return time;
  }
  catch(Exception ex)
  {
   ex.printStackTrace();
   logger.error(StringHandler.GetException(ex));
   return "";
  }
 }
 public void run() {
  try {
   //得到客户端发送的信息
   BufferedReader br = null;
   InputStream socketIn = socket.getInputStream();

   br = new BufferedReader(new InputStreamReader(socketIn));
   String actionInfo = "";
   try
   {
    actionInfo = br.readLine();
   }
   catch(Exception ex){}
   while (actionInfo != null)
   {
    System.out.println(GetCurrentTime() + "收到来自【" + socket.getInetAddress() + ":" + socket.getPort() + "】的监听请求:" + actionInfo);
    if (actionInfo != null)
    {
     String str = GetInfoByAction(actionInfo);
     //返回信息给Client端
     PrintWriter pw = getWriter(socket);
     //System.out.println(str);
     pw.println(str);
    }
    actionInfo = br.readLine();
   }
  } catch (Exception e) {
   logger.error(StringHandler.GetException(e));
   e.printStackTrace();
  }
   finally {
   try {
    if (socket != null)
     socket.close();
   } catch (Exception e) {}
  }
 }
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于Java并发编程的总结和思考
编写优质的并发代码是一件难度极高的事情。Java语言从第一版本开始内置了对多线程的支持,这一点在当年是非常了不起的,但是当我们对并发编程有了更深刻的认识和更多的实践后,实现并发编程就有了更多的方案和更好的选择。本文是对并发编程的一点总结和思考,同时也分享了Java 5以后的版本中如何编写并发代码的一点点经验。
Java并发编程全套源码
Java并发编程全套源码,涵盖常见并发编程常见的所有知识点,如对象锁,Executors多任务线程框架,线程池等代码示例.
01 - Java并发编程与高并发解决方案笔记-基础篇
01 - Java并发编程与高并发解决方案笔记-基础篇 基础篇很重要!很重要!很重要!!!一定要理解和认真思考。 01 - Java并发编程与高并发解决方案笔记-基础篇 1.课程准备 2.并发编程基础 2-0 CPU多级缓存 2-1 CPU多级缓存 - 缓存一致性(MESI) 2-2 CPU多级缓存-乱序执行优化 2-3 Java内存模型(Java Memory Model,JM...
如和学习java并发编程
学习java并发必读
Java并发编程75道面试题及答案——稳了
Java并发编程75道面试题及答案,看了就是稳。
java并发编程内部分享PPT
java并发编程内部分享PPT
java并发编程书籍
Concurrent Programming in Java ppt.pdf: http://www.t00y.com/file/89704595 Concurrent Programming in Java ppt.pdf: http://www.t00y.com/file/90032321 Concurrent Programming in Java.pdf: http://w
Java并发编程面试题--共87题
不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。 注:本文档根据http://www.importnew.com/12773.html 和http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-answers/ 这两个网站的并发编程试题集整理得到的文档,
(龙果学院)java并发编程原理与实战 价值899
龙果学院java并发编程视频完整版本,高清,文件是下载地址和密码,非常值得。仅供学习和参考。
并发编程的艺术
《Java并发编程的艺术》高清完整PDF版 《Java并发编程的艺术》高清完整PDF版