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

问题描述

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

解决方案

http://blog.csdn.net/share_idea/article/details/6950722
http://blog.sina.com.cn/s/blog_5421dfd20100rxgp.html

解决方案二:
最简单的就是Java Web项目啊,Tomcat处理请求就是用的多线程处理的。

解决方案三:

 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.5binjava -classpath c:jdk1.5 SocketServerThreadpublic 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) {}  } }}
时间: 2024-12-26 22:42:02

关于java并发编程,完整代码的相关文章

推荐阅读Java并发性领域编程最值得一读的力作《JAVA并发编程实践》

我的第一次之给<JAVA并发编程实践>写推荐序英文书名:Java Concurrency in Practice 中文书名:JAVA并发编程实践 这是一本入围17届Jolt大奖的书,虽然最终他没有获奖,但是这只是与政治有关的.:) 推荐序原文如下: http://book.csdn.net/bookfiles/398/10039814644.shtml 在汗牛充栋的 Java 图书堆中,关于并发性的书籍却相当稀少,然而这本书的出现,将极大地弥补了这一方面的空缺.即使并发性编程还没进入到您的 J

Java并发编程:从根源上解析volatile关键字的实现

Java并发编程:volatile关键字解析 1.解析概览 内存模型的相关概念 并发编程中的三个概念 Java内存模型 深入剖析volatile关键字 使用volatile关键字的场景 2.内存模型的相关概念 缓存一致性问题.通常称这种被多个线程访问的变量为共享变量. 也就是说,如果一个变量在多个CPU中都存在缓存(一般在多线程编程时才会出现),那么就可能存在缓存不一致的问题. 为了解决缓存不一致性问题,通常来说有以下2种解决方法: 通过在总线加LOCK#锁的方式 通过缓存一致性协议 这2种方式

Java并发编程总结3——AQS、ReentrantLock、ReentrantReadWriteLock(转)

本文内容主要总结自<Java并发编程的艺术>第5章--Java中的锁.   一.AQS AbstractQueuedSynchronizer(简称AQS),队列同步器,是用来构建锁或者其他同步组建的基础框架.该类主要包括: 1.模式,分为共享和独占. 2.volatile int state,用来表示锁的状态. 3.FIFO双向队列,用来维护等待获取锁的线程. AQS部分代码及说明如下: public abstract class AbstractQueuedSynchronizer exte

《Java 并发编程的艺术》迷你书

本文源自InfoQ发表的<Java 并发编程的艺术>电子书  作者:方腾飞  序言:张龙 免费下载此迷你书 推荐序 欣闻腾飞兄弟的<聊聊并发>系列文章将要集结成InfoQ迷你书进行发布,我感到非常的振奋.这一系列文章从最开始的发布到现在已经经历了两年多的时间,这两年间,Java世界发生了翻天覆地的变化.Java 7已经发布,而且Java 8也将在下个月姗姗来迟.围绕着JVM已经形成了一个庞大且繁荣的生态圈,Groovy.Scala.Clojure.Ceylon等众多JVM语言在蓬勃

《Java并发编程的艺术》第一章

作者:方腾飞  本文是样章  购买本书=>  当当 京东 天猫 互动 第1章并发编程的挑战 并发编程的目的是为了让程序运行的更快,但是并不是启动更多的线程,就能让程序最大限度的并发执行.在进行并发编程时,如果希望通过多线程执行任务让程序运行的更快,会面临非常多的挑战,比如上下文切换的问题,死锁的问题,以及受限于硬件和软件的资源限制问题,本章会介绍几种并发编程的挑战,以及解决方案. 1.1     上下文切换 即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制

《Java并发编程的艺术》-Java并发包中的读写锁及其实现分析

作者:魏鹏  本文是<Java并发编程的艺术>的样章 1. 前言 在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞.读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升. 除了保证写操作对读操作的可见性以及并发性的提升之外,读写锁能够简化读写交互场景的编程方式.假设在程序中定义一个共享

《Java并发编程的艺术》一一2.1 volatile的应用

2.1 volatile的应用 在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的"可见性".可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值.如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度.本文将深入分析在硬件层面上Intel处理器是如何实现volatile的,

《Java并发编程的艺术》一一3.5 锁的内存语义

3.5 锁的内存语义 众所周知,锁可以让临界区互斥执行.这里将介绍锁的另一个同样重要,但常常被忽视的功能:锁的内存语义.3.5.1 锁的释放-获取建立的happens-before关系 锁是Java并发编程中最重要的同步机制.锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息. 下面是锁释放-获取的示例代码. class MonitorExample { int a = 0; public synchronized void writer() { // 1 a++; //

Java并发编程之性能、扩展性和响应_java

本文讨论的重点在于多线程应用程序的性能问题.我们会先给性能和扩展性下一个定义,然后再仔细学习一下Amdahl法则.下面的内容我们会考察一下如何用不同的技术方法来减少锁竞争,以及如何用代码来实现. 1.性能 我们都知道,多线程可以用来提高程序的性能,背后的原因在于我们有多核的CPU或多个CPU.每个CPU的内核都可以自己完成任务,因此把一个大的任务分解成一系列的可彼此独立运行的小任务就可以提高程序的整体性能了.可以举个例子,比如有个程序用来将硬盘上某个文件夹下的所有图片的尺寸进行修改,应用多线程技