`
xiangkw
  • 浏览: 44158 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java 模拟并发访问

阅读更多
类:NetUtils.java
import java.io.DataInputStream;      
import java.io.DataOutputStream;          
import java.net.HttpURLConnection;      
import java.net.URL;          
import java.util.Map; 
import java.util.Properties;

public class NetUtils
{
	
	public static final String CHARACTER_ENCODING = "UTF-8";      
  public static final String PATH_SIGN = "/";      
  public static final String METHOD_POST = "POST";      
  public static final String METHOD_GET = "GET";      
  public static final String CONTENT_TYPE = "Content-Type";      
   
  /**    
   * 以POST方式向指定地址发送数据包请求,并取得返回的数据包    
   *     
   * @param urlString    
   * @param requestData    
   * @return 返回数据包    
   * @throws Exception    
   */     
  public static byte[] requestPost(String urlString, byte[] requestData)      
          throws Exception
  {      
      Properties requestProperties = new Properties();      
      requestProperties.setProperty(CONTENT_TYPE,      
              "application/octet-stream; charset=utf-8");      
   
      return requestPost(urlString, requestData, requestProperties);      
  }      

  /**    
   * 以POST方式向指定地址发送数据包请求,并取得返回的数据包    
   *     
   * @param urlString    
   * @param requestData    
   * @param requestProperties    
   * @return 返回数据包    
   * @throws Exception    
   */     
  public static byte[] requestPost(String urlString, byte[] requestData,      
          Properties requestProperties) throws Exception
  {
      byte[] responseData = null;      
      HttpURLConnection con = null;      
   
      try {      
          URL url = new URL(urlString);      
          con = (HttpURLConnection) url.openConnection();      
          //设置请求属性
          if ((requestProperties != null) && (requestProperties.size() > 0))
          {      
              for (Map.Entry<Object, Object> entry : requestProperties.entrySet())
              {      
                  String key = String.valueOf(entry.getKey());      
                  String value = String.valueOf(entry.getValue());      
                  con.setRequestProperty(key, value);      
              }      
          }      
   
          con.setRequestMethod(METHOD_POST); // 置为POST方法      
   
          con.setDoInput(true); // 开启输入流      
          con.setDoOutput(true); // 开启输出流      
   
          // 如果请求数据不为空,输出该数据。      
          if (requestData != null)
          {      
              DataOutputStream dos = new DataOutputStream(con.getOutputStream());      
              dos.write(requestData);
              dos.flush();      
              dos.close();      
          }      
   
          int length = con.getContentLength();      
          // 如果回复消息长度不为-1,读取该消息。      
          if (length != -1)
          {      
              DataInputStream dis = new DataInputStream(con.getInputStream());      
              responseData = new byte[length];      
              dis.readFully(responseData);      
              dis.close();      
          }      
      }
      catch (Exception e)
      {      
          throw e;      
      }
      finally
      {      
          if (con != null)
          {      
              con.disconnect();      
              con = null;      
          }      
      }      
      return responseData;      
  }      

}

分享到:
评论
5 楼 icezx 2013-08-15  
alvin198761 写道
icezx 写道
alvin198761 写道
线程的执行时间不一样的吧,通过循环执行的,是并发??


并发和执行时间不一致有毛关系

我做过大型的并发测试工具,要你教?你知道啥是并发不?

你做过大型并发测试工具,还问楼主这个是不是并发?
4 楼 alvin198761 2013-08-15  
icezx 写道
alvin198761 写道
线程的执行时间不一样的吧,通过循环执行的,是并发??


并发和执行时间不一致有毛关系

我做过大型的并发测试工具,要你教?你知道啥是并发不?
3 楼 icezx 2013-08-14  
alvin198761 写道
线程的执行时间不一样的吧,通过循环执行的,是并发??


并发和执行时间不一致有毛关系
2 楼 alvin198761 2012-04-28  
线程的执行时间不一样的吧,通过循环执行的,是并发??
1 楼 xiangkw 2011-06-28  
Test 类:


import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.Random;


public class MyTest extends Thread
{
	private final static int maxNum = 1000;
	private static String path = "http://10.111.132.85:1080/demo/bb1.jpg";
	private static String folderPath = "D:\\temp\\";
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		long start = new Date().getTime(); 

		List<MyTest> list  = new ArrayList<MyTest>();

		//开启 N 个线程
		for(int i = 0;i<maxNum;i++)
		{
			MyTest test = new MyTest();
			test.start();
			list.add(test);
		}
		
		//等待N个线程都执行完成
		for(MyTest test : list)
		{
			try 
			{
				test.join();
			}
			catch (InterruptedException e)
			{
				e.printStackTrace();
			}
		}
		
		//计算出所耗的时间 (毫秒)
		long end = new Date().getTime();
		System.out.println("Time:"+(end-start)+" ms");
	}

	@Override
	public void run()
	{
		Properties requestProperties = new Properties();      
	   
    // 模拟浏览器信息      
    requestProperties.put("User-Agent",      
                    "Mozilla/3.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TencentTraveler ; .NET CLR 1.1.4322)");      

		try
		{
			//相当于发送请求
			byte[] b = NetUtils.requestPost(path,"XML".getBytes(),requestProperties);
			
			//写文件
			FileOutputStream output = new FileOutputStream(this.initFile());
	    output.write(b);
	    output.close();
	    System.out.println(super.getName());
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
	
	//生成以随机命名的文件,尽量保证文件名不重复;
	private File initFile()
	{
		String ext = path.substring(path.lastIndexOf("."));
		String randomStr = new Random().nextLong()+"_"+new Random().nextInt();
		String fileName = folderPath+randomStr+ext;
		
		return new File(fileName);
	}
}

相关推荐

    Java 模拟线程并发

    总之,Java模拟线程并发是一个广泛且深入的话题,涵盖了线程的创建、同步、管理和高级并发工具的使用。理解和熟练应用这些知识,能够帮助开发者编写出高效、安全的多线程程序。在实际开发中,应根据具体需求选择合适...

    实现Java高并发隔离 模拟

    这篇博文将探讨如何在Java中实现高并发隔离,并通过模拟来理解其工作原理。 首先,我们要了解并发隔离的几种主要机制: 1. **线程局部存储(ThreadLocal)**:Java中的`ThreadLocal`类提供了一种线程安全的方式,...

    java模拟微信浏览器访问.rar

    这个“java模拟微信浏览器访问.rar”压缩包中的主要文件是“MonitorWeixinBrowser.java”,我们可以推测这是一个Java程序,用于模拟微信内置浏览器的行为。下面将详细介绍这个主题的相关知识点。 1. **Java HTTP ...

    http并发访问 java源码

    本项目提供了一个用Java语言实现的HTTP并发访问模拟工具,名为HttpClient。 HttpClient是一个流行的Java库,由Apache软件基金会维护,它允许开发者创建复杂的HTTP客户端应用。这个库提供了丰富的功能,包括但不限于...

    高并发模拟多个用户同时访问

    高并发模拟多个用户同时访问所写接口,用于测试接口所需要的的并发,和接口的最多承受用户量,适用于一些简单的压力测试。

    java7并发编程实战手册 书中源码

    `ThreadTest`可能就是这样一个测试类,它可能包含了各种并发场景的模拟,比如线程间的协作、竞争条件的测试,或者对并发集合如`ConcurrentHashMap`、`CopyOnWriteArrayList`的性能测试。 总之,通过学习和实践这些...

    java多线程模拟处理银行的实时转账交易

    本项目"java多线程模拟处理银行的实时转账交易"旨在通过多线程技术来模拟实现这一过程,确保程序的可扩展性和高效率。 首先,我们需要理解多线程的基本概念。线程是操作系统分配CPU时间片的基本单位,一个进程中...

    java模拟的操作系统

    在Java模拟操作系统中,可能需要抽象出设备类,为不同类型的设备提供通用的接口,同时处理设备的独占性和并发访问问题。 5. **时钟功能**: 时钟是操作系统中用于计时和触发事件的关键组件。模拟时钟可能需要实现...

    Java高并发笔记.pdf

    在一个单处理器系统中,由于处理器一次只能执行一个指令,因此并发实际上是通过任务间的快速切换来模拟“同时执行”的效果。 - **应用场景**:在办公室中,如果有多个员工需要使用同一台打印机,那么打印机在同一...

    Java模拟银行系统

    5. **并发控制**:在多用户环境下,为了保证数据的一致性和完整性,可能需要使用synchronized关键字或java.util.concurrent包中的工具来实现线程安全的并发访问。 6. **用户界面**:系统通常会包含一个用户界面,...

    java模拟qq项目

    我们还需要用到同步机制,如synchronized关键字和Lock接口,以避免并发访问资源时出现的数据不一致问题。 数据库连接是项目的关键部分。Java通过JDBC(Java Database Connectivity)提供了一种标准的方式来访问各种...

    java模拟实现PV操作

    在并发编程中,PV操作(即信号量Semaphore)是由荷兰计算机科学家Edsger Dijkstra提出的,它通过控制对共享资源的访问来避免竞态条件,确保线程间的同步。在Java中,我们可以使用内置的`java.util.concurrent`包中的...

    java CSMA/CD 模拟

    Java是一种广泛使用的编程语言,可以用来实现CSMA/CD协议的模拟。在这个项目中,我们将探讨如何使用Java来模拟CSMA/CD的工作原理。 首先,我们需要理解CSMA/CD的基本概念。CSMA/CD的工作机制是“载波监听”和“冲突...

    java模拟银行源代码

    Java的synchronized关键字和Lock接口可用于控制并发访问,防止数据竞争。 8. **单元测试**:为了确保代码的正确性,通常会编写JUnit测试用例,对各个类的方法进行测试,包括边界条件和异常情况。 9. **GUI界面**:...

    JAVA并发编程

    11. **并发测试**:书中可能会介绍如何编写测试用例来检查并发程序的正确性,如使用`Thread.sleep()`模拟延迟,或者使用`Thread.yield()`让其他线程有机会执行。 以上只是并发编程的一部分关键知识点,高洪岩先生的...

    java并发编程 英文版

    《Java并发编程英文版》是Doug Lea所著的一部关于Java并发编程的经典作品。Doug Lea是计算机科学领域的知名学者,尤其在并发编程、设计模式、软件工程等领域有深入的研究和独到的见解。本书在1996年首次出版,至今仍...

    java CSMA/CD 协议模拟

    - **介质类**:模拟物理传输介质,处理多个设备的并发访问,提供监听和发送数据的方法。 - **冲突检测算法**:用于检测数据传输过程中的冲突,并执行退避算法。 编写Java代码时,你可以使用多线程来模拟多个并发的...

    java模拟多线程买票问题.docx

    在Java编程中,多线程买票问题是演示并发控制的经典示例。这个问题旨在展示如何在多个线程共享同一资源(如票库存)时确保数据的一致性和正确性。以下是三种不同方法来解决这个问题: 1. **使用`synchronized`...

    java队列模拟实现

    Java提供了`synchronized`关键字和`java.util.concurrent`包下的工具类来保证并发访问的安全性。 6. **异常处理**:在处理队列操作时,可能会遇到空队列时尝试删除元素等异常情况。项目应包含适当的异常处理机制,...

    模拟进程并发机制

    5. **并发集合**: Java并发包`java.util.concurrent`提供了一些线程安全的集合类,如`ConcurrentHashMap`、`CopyOnWriteArrayList`等,它们内部实现了锁或其他同步机制,以保证并发访问的安全性。 **三、并发控制与...

Global site tag (gtag.js) - Google Analytics