- 浏览: 587941 次
- 来自: 北京
文章分类
最新评论
-
lidi2011:
很通俗易懂的文章,很形象。
同步synchronized方法和代码块 -
inuyasha027:
领教了,谢谢。
Hadoop安装, Hive 安装。 -
xbmujfly:
好文 ,本人发现晚了
学习笔记 - java.util.concurrent 多线程框架 -
hanazawakana:
学习学习!
ANT-build.xml文件详解 -
david.org:
似乎还忽略一点,那就是cassandra不同数据中心的同步,H ...
Cassandra Vs HBase
有一个网站列表,我们分别使用单线程和多线程来测试这个网站是否允许Ping,既是否ping这些网站能得到回应。
单线程,与使用了线程池的多线程之间的对比:
package com.concurrent.demo; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TestThreadPool { public static long pingWithThreadPool() throws InterruptedException { // 创建已有10个固定线程的线程池 ExecutorService exec = Executors.newFixedThreadPool(10); // 开始计时 long startTime = System.currentTimeMillis(); List list = getSites(); for (int i = 0; i < list.size(); i++) { final String ip = list.get(i).toString(); Runnable task = new Runnable() { public void run() { ping(ip); } }; // 往线程池中添加任务,线程开始处理这些任务 exec.execute(task); } // 关闭线程池,不会阻塞主线程的执行【这里是main线程】 exec.shutdown(); // main线程暂停执行一段时间,等待线程池中的任务执行完毕 Thread.currentThread().sleep(1000 * 25); // 由于无法准确统计多线程的执行时间,这个是一个大概的执行时间。 // 实际开发中无意义。 return (System.currentTimeMillis() - startTime); } /* * 或得要操作的网站列表 */ public static List getSites() { List list = new ArrayList(); list.add("www.sina.com.cn"); list.add("www.sohu.com"); list.add("www.google.com"); list.add("www.baidu.com"); list.add("www.163.com"); list.add("www.yahoo.com"); list.add("xiaobian.iteye.com"); list.add("www.iteye.com"); list.add("www.chinaunix.net"); list.add("www.topswim.net"); return list; } /* * 单线程的方式来进行操作 * */ public static long pingWithOutThread() { long startTime = System.currentTimeMillis(); List list = getSites(); for (int i = 0; i < list.size(); i++) { ping(list.get(i).toString()); } return (System.currentTimeMillis() - startTime);// 统计整个操作消费的时间 } public static void main(String args[]) throws InterruptedException { System.out.println(pingWithThreadPool() / 1000 + "s"); System.out.println("\n----------------------------\n"); System.out.println(pingWithOutThread() / 1000 + "s"); } /* * 调用系统命令ping来判断某个网站是否允许ping */ private static void ping(String ip) { Runtime rt = Runtime.getRuntime(); try { Process p = rt.exec("ping " + ip); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(p.getInputStream())); StringBuffer sb = new StringBuffer(); String s = null; while ((s = bufferedReader.readLine()) != null) { sb.append(s); sb.append(" "); } // System.out.println(sb.toString()); if (sb.toString().indexOf("Sent = 4, Received = 4") > -1) { System.out.println(ip + " be pinged is ok"); } else System.out.println(ip + " be pinged not ok"); } catch (Exception e) { e.printStackTrace(); } finally { rt.gc();// 强制回收 } } }
执行结果:
【多线程】
www.topswim.net be pinged is ok
xiaobian.iteye.com be pinged not ok
www.iteye.com be pinged not ok
www.163.com be pinged is ok
www.yahoo.com be pinged is ok
www.google.com be pinged is ok
www.baidu.com be pinged is ok
www.chinaunix.net be pinged is ok
www.sina.com.cn be pinged is ok
www.sohu.com be pinged not ok
25s
----------------------------
【单线程】
www.sina.com.cn be pinged is ok
www.sohu.com be pinged not ok
www.google.com be pinged is ok
www.baidu.com be pinged is ok
www.163.com be pinged is ok
www.yahoo.com be pinged is ok
xiaobian.iteye.com be pinged not ok
www.iteye.com be pinged not ok
www.chinaunix.net be pinged is ok
www.topswim.net be pinged is ok
57s
有结果可以看到多线程的执行速度比单线程快乐一倍还多。所以在合适的地方使用多线程可以加快程序的执行速度。
多线程的使用是充分提交CPU的使用效率。
评论
25s
这个输出的其实是你sleep的时间和程序实际的执行时间没有关系。。。
发表评论
-
Cassandra Vs HBase
2011-03-31 17:27 2124Cassandra vs HBaseBy Vaibhav Pu ... -
Slope one:简单高效的推荐算法
2011-03-31 17:16 2710推荐系统最早在亚马逊的网站上应用,根据以往用户的购买行为, ... -
Hive 与 Hbase 的简单区别
2011-03-28 11:10 4167Hive是為簡化編寫MapReduce程序而生的,使用MapR ... -
Java对象缓存系统的实现,实现了LRU算法,并可以进行集群同步
2009-08-05 17:32 3703LRU算法实现: package com.javaeye.x ... -
Unsupported major.minor version 49.0
2009-07-14 16:03 1535http://www.blogjava.net/Unmi/ar ... -
Apache Commons Logging 是如何决定使用哪个日志实现类的
2009-07-14 16:01 1679http://www.blogjava.net/Unmi/ar ... -
Spring Quartz 任务调度
2009-07-07 10:22 2216要执行的任务类:CronTask pa ... -
Ngnix初探
2009-06-15 17:03 3210Nginx是什么? ... -
使用eclipse生成文档 javadoc
2009-06-15 10:20 14061,在项目列表中按右键,选择Export(导出),然后在Exp ... -
Java 日期类操作
2009-06-11 14:43 2291java之中操作日期的类分别为: #系统的日期时间类 ... -
留个记号。
2009-06-10 16:01 1020Comparable Comparator具体区别 h ... -
Java中java.io.Serializable接口的应用
2009-06-10 10:33 2542在Java中java.io.Serializable 用于实现 ... -
Java中的克隆功能的应用
2009-06-09 13:30 1670在JAVA中对象的克隆有的时候是必要的,克隆分两种:浅克隆、深 ... -
判断SQL注入的字符
2009-06-08 13:13 1438判断SQL注入的字符 public static bo ... -
ThreadLocal的设计与使用(原理篇)
2009-06-05 17:17 1083在jdk1.2推出时开始支持java.lang.ThreadL ... -
探索Java类加载机制
2009-06-05 10:34 1718java虚拟【java.dll】存在于JRE目中下的bin目录 ... -
Nagios介绍
2009-05-26 13:33 1677系统管理员如何能够监视大量的机器和服务以便提前解决问题防止人们 ... -
Memecached实现缓存系统搭建。
2009-05-25 17:51 28421.在windows系统或Linux系统上安装memecach ... -
Java动态代理实现。
2009-05-25 13:33 945HelloWorld.java 接口文件 public i ... -
Java回调函数的实现方式。
2009-05-14 15:13 1753接口Callback类 public interface ...
相关推荐
在Java应用服务器中,Tomcat是一个非常常见的轻量级选择,尤其在开发和部署Web应用程序时。然而,如同任何其他程序一样,Tomcat也可能遇到内存管理问题,导致内存溢出。"java.util.concurrent.ExecutionException: ...
一个高性能的Java线程库,该库是 JDK 1.5 中的 java.util.concurrent 包的补充,可用于基于并发消息机制的应用。该类库不提供远程的消息功能,其设计的宗旨是实现一个内存中的消息传递机制. 主要特点有: * All ...
为了简化并发编程的复杂性,Java 5 引入了 `java.util.concurrent` 包,提供了一系列强大的类和接口,帮助开发者更高效地管理多线程任务。 #### 二、`java.util.concurrent` 概览 `java.util.concurrent` 包提供了...
Java.util.concurrent是Java 5.0引入的一个重要包,它为多线程编程提供了一组高级并发工具。这个包的设计者是Doug Lea,它的出现是JSR-166的一部分,也被称作Tiger更新。Java.util.concurrent的引入是为了解决传统...
java.util.concurrent 多线程框架 java.util.concurrent 多线程框架是 Java 语言中用于多线程编程的库。该库提供了多种线程池实现、并发集合、同步器、lock 等多种机制,以便开发者更方便地编写高效、可靠的多线程...
为了更好地支持并发编程,Java平台在J2SE 1.5版本中引入了`java.util.concurrent`包,这是一个包含了许多中级并发支持类的集合,通过Java社区过程(Java Community Process, JCP)的Java规范请求(Java ...
JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用是Java多线程编程中的一种重要概念。随着多线程编程的普及,线程池的使用变得越来越频繁。Java中的线程池是通过ThreadPoolExecutor类实现的。 一、...
标签“Java concurrent”是指这是一个关于Java并发编程的内容,这通常是面向希望开发多线程应用程序的Java开发者。并发编程允许程序同时处理多个任务,这对于多核心处理器和多处理器系统尤其重要。 文档的一部分...
AQS(AbstractQueuedSynchronizer)是Java.util.concurrent包中同步器的基础框架,它的核心设计思想与实现方法在Doug Lea先生的这篇论文中有详细的介绍。论文详细阐述了AQS框架的原理、设计、实现、应用以及性能等...
`java.util.concurrent.ExecutionException` 是Java并发编程中一个常见的异常,通常在执行Future对象的get()方法时抛出。这个异常表明在异步任务的执行过程中发生了异常。当我们使用ExecutorService提交任务并尝试...
文档明确指出,Doug Lea为J2SE 5.0引入的java.util.concurrent包提供了一套精巧的同步器框架,这套框架极大地简化了并发控制的实现,并且在多个领域提供了高效的同步原语,如锁、条件变量、信号量、事件标志等。...
Java并发工具包(java.util.concurrent)是Java平台上用于高效、安全地处理多线程编程的重要组件。这个包包含了丰富的并发工具类,旨在帮助开发者构建高度并发的程序,提高程序的性能和可伸缩性。本资源是该工具包的...
`java.util.concurrent`包是Java提供的一个强大的多线程工具库,其中包含了许多类和接口,如`CountDownLatch`和`CyclicBarrier`,它们为程序员提供了更高级别的同步和协调机制。这篇文档将详细解析这两个工具类的...
### Java.util.concurrent_您不知道的5件事 #### 1. Semaphore(信号量) - **定义与作用**:`Semaphore` 类...无论是简单的信号量控制还是复杂的多线程同步逻辑,`java.util.concurrent` 包都能提供合适的解决方案。
《Java Util Concurrent中文版》是Java并发编程领域的重要参考资料,主要涵盖了Java标准库中的`java.util.concurrent`包及其相关类和接口。这个包是Java多线程编程的核心,提供了高效、安全的并发工具,帮助开发者...
Java.util.concurrent(JUC)是Java平台中的一个核心包,专门用于处理多线程并发问题。这个包包含了大量的工具类和接口,极大地简化了并发编程的复杂性,提高了程序的性能和可伸缩性。本测试源文件主要是针对JUC并发...
Synchronized和java.util.concurrent.locks.Lock都是Java中用于实现线程同步的关键字和接口,它们的主要目标是保证多线程环境下的数据一致性与并发安全。然而,两者在使用方式、控制粒度以及灵活性方面存在显著差异...
Java并发工具包java.util.concurrent是Java平台在Java 5版本中引入的一组新的并发编程类库,旨在帮助Java开发者更容易地实现复杂的并发程序。这一包的出现,极大地简化了开发者在处理线程和数据同步时所遇到的难题,...