- 浏览: 579755 次
- 来自: 北京
文章分类
最新评论
-
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 2076Cassandra vs HBaseBy Vaibhav Pu ... -
Slope one:简单高效的推荐算法
2011-03-31 17:16 2665推荐系统最早在亚马逊的网站上应用,根据以往用户的购买行为, ... -
Hive 与 Hbase 的简单区别
2011-03-28 11:10 4131Hive是為簡化編寫MapReduce程序而生的,使用MapR ... -
Java对象缓存系统的实现,实现了LRU算法,并可以进行集群同步
2009-08-05 17:32 3657LRU算法实现: package com.javaeye.x ... -
Unsupported major.minor version 49.0
2009-07-14 16:03 1496http://www.blogjava.net/Unmi/ar ... -
Apache Commons Logging 是如何决定使用哪个日志实现类的
2009-07-14 16:01 1641http://www.blogjava.net/Unmi/ar ... -
Spring Quartz 任务调度
2009-07-07 10:22 2163要执行的任务类:CronTask pa ... -
Ngnix初探
2009-06-15 17:03 3148Nginx是什么? ... -
使用eclipse生成文档 javadoc
2009-06-15 10:20 13731,在项目列表中按右键,选择Export(导出),然后在Exp ... -
Java 日期类操作
2009-06-11 14:43 2250java之中操作日期的类分别为: #系统的日期时间类 ... -
留个记号。
2009-06-10 16:01 979Comparable Comparator具体区别 h ... -
Java中java.io.Serializable接口的应用
2009-06-10 10:33 2492在Java中java.io.Serializable 用于实现 ... -
Java中的克隆功能的应用
2009-06-09 13:30 1609在JAVA中对象的克隆有的时候是必要的,克隆分两种:浅克隆、深 ... -
判断SQL注入的字符
2009-06-08 13:13 1404判断SQL注入的字符 public static bo ... -
ThreadLocal的设计与使用(原理篇)
2009-06-05 17:17 1035在jdk1.2推出时开始支持java.lang.ThreadL ... -
探索Java类加载机制
2009-06-05 10:34 1666java虚拟【java.dll】存在于JRE目中下的bin目录 ... -
Nagios介绍
2009-05-26 13:33 1639系统管理员如何能够监视大量的机器和服务以便提前解决问题防止人们 ... -
Memecached实现缓存系统搭建。
2009-05-25 17:51 27941.在windows系统或Linux系统上安装memecach ... -
Java动态代理实现。
2009-05-25 13:33 896HelloWorld.java 接口文件 public i ... -
Java回调函数的实现方式。
2009-05-14 15:13 1716接口Callback类 public interface ...
相关推荐
java.util.concurrent-多线程框架
一个高性能的Java线程库,该库是 JDK 1.5 中的 java.util.concurrent 包的补充,可用于基于并发消息机制的应用。该类库不提供远程的消息功能,其设计的宗旨是实现一个内存中的消息传递机制. 主要特点有: * All ...
除了具有很好的并发性的Collections,java.util.concurrent还引入了其他一些预先构建的组件,它们可帮助您调整和执行多线程应用程序中的线程。
java.util.concurrent.CountDownLatch通过org.redisson.core.RTopic 实现分布式订阅/发布通过 org.redisson.core.RHyperLogLog 实现分布式HyperLogLog 线程安全支持 OSGi超过110个单元测试 标签:Redisson...
NULL 博文链接:https://janeky.iteye.com/blog/769965
java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 ...
关于java.util.concurrent多线程核心包内各种线程资源的使用场景例子
不客气地说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作。通过提供一组可靠的、高性能并发构建块,开发人员可以提高并发类的线程安全、可伸缩性、性能、可读性和可靠性...
主要介绍了浅谈java.util.concurrent包中的线程池和消息队列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 ...
java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 JAR ...
java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 JAR ...
java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 JAR ...
java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 ...
java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 ...
1. stop() 和 suspend() 方法为何不推荐使用? 2. sleep() 和 wait() 有什么区别? 3. 同步和异步有何异同,...5. 简述 synchronized 和 java.util.concurrent.locks.Lock 的异同? 6. 概括的解释下线程的几种可用状态。
java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 ...
它们是许多多线程应用程序的基本构件的高性能实现,并经历了大量测试。util.concurrent是JSR 166的切入点,它将带来一组并发性的实用程序,这些实用程序将成为 JDK 1.5中的java.util.concurrent包,但您不必等到那时...
无论是工作学习,不断的总结是必不可少的。只有不断的总结,发现问题,弥补不足,才能长久的...java.util.concurrent.locks包下常用的类 326 NIO(New IO) 327 volatile详解 337 Java 8新特性 347 Java 性能优化 362