- 浏览: 181187 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
u010244357:
你用了部分是自己的包,怎么跑呢,先生。
如何在springMVC 中对REST服务使用mockmvc 做测试 -
Abird2Simba:
你用了部分是自己的包,怎么跑呢,先生。
如何在springMVC 中对REST服务使用mockmvc 做测试 -
javer:
javer 写道代码看着有点乱啊,怎么搞的 sorry,原来是 ...
如何在springMVC 中对REST服务使用mockmvc 做测试 -
javer:
代码看着有点乱啊,怎么搞的
如何在springMVC 中对REST服务使用mockmvc 做测试 -
u011643314:
你用了部分是自己的包,怎么跑呢,先生。
如何在springMVC 中对REST服务使用mockmvc 做测试
前面2个月一直忙碌,但是还是不忘在iteye 上发发帖子,写写文章。终于这周over了2套系统,剩下的时间基本上修改跟维护了。
在完成的一套“应用安装系统”后对多线程的理解又深了一点。
这里写出来,一来跟大家分享,二来让坛子里的大牛们指教指教,许多不足之处。
ps:看《maven 实战》看着看着就想睡觉,不知为什么?我一般看书很认真的。
ok。看看需求:
首先来实现一个多线程。简单的说就是在一个方法里头要完成6件事,6件事没有直接关联关系。不会因为一件事不完成导致下面的事情无法完成。都完成好了,就执行下一个方法。
线程的俩种实现方式,如果你的代码已经继承其他类了,就实现Runnable借口。这俩种方式的线程都是没有返回值的。
公司的代码不好贴,这里贴个变相的demo.
策略一:
这样做貌似也能达到要求。但是有明显的缺点。
第一:线程同时运行,必须用守护线程去执行线程做完以后将要运行的方法:这是不可取的,守护线程会立刻跟这死掉,如果将要做的事情的需要消耗大量的时间,或者开销的话,那么这个方法是不会正确执行的。【不知道具体原因,希望大鸟能指点迷津。】
第二:程序一执行,各个线程独立跑,守护线程只能监视各个线程的状态而无法获取各个线程所执行的事情是否成功了。这是相当不理想的。
策略二:Callable
使用策略二的好处有:
第一:Callable 的好处是有返回值,也就是说一个线程是否成功完成了他的使命,我们可以从他的返回的结果中【自定义结果】中得知。
第二:ThreadPoolExecutor【写了一些并发包相关的博文放在草稿箱里没有发表出来,主要是怕错误太多 - -,贻笑大方】它提供了一个线程池,使用方法通常使用 Executors 工厂方法配置。 api说:线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。每个 ThreadPoolExecutor 还维护着一些基本的统计数据,如完成的任务数。用Executor提交一个带返回值的Callable到ExecutorService里面。返回只类型是Futrue[未来,很有意思]。更有意思的是他会等全部的Callable执行完了以后在往下走,当然需要控制的是:
第一个newCachedThreadPool();他会启动n个线程来完成你的任务。他能自动线程回收。但是他的时间是60s.可以把这个demo跑下,发现让他sleep70秒他可以。这个问题我搞了很久没搞明白【求明白的分享】。所以我没用。用的是.newFixedThreadPool(7)参数能设置他的线程数。
总的来说还是那俩句话,一是分享,一是请教。谢谢
在完成的一套“应用安装系统”后对多线程的理解又深了一点。
这里写出来,一来跟大家分享,二来让坛子里的大牛们指教指教,许多不足之处。
ps:看《maven 实战》看着看着就想睡觉,不知为什么?我一般看书很认真的。
ok。看看需求:
首先来实现一个多线程。简单的说就是在一个方法里头要完成6件事,6件事没有直接关联关系。不会因为一件事不完成导致下面的事情无法完成。都完成好了,就执行下一个方法。
线程的俩种实现方式,如果你的代码已经继承其他类了,就实现Runnable借口。这俩种方式的线程都是没有返回值的。
公司的代码不好贴,这里贴个变相的demo.
策略一:
public class TestThread { // private static int i; //这里就相当做事的方法,所以线程都做这一件事,同时做 public void get(long name) { try { Thread.sleep(name); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("-----name-----"+name); i++; } //全部做完了。 public int over(int n){ System.out.println("---over--"+n); return n; } //正开始做 public void ing (){ final TestThread td = new TestThread(); Thread tr4 = new Thread(new Runnable(){ @Override public void run() { td.get(1500L); } }); tr4.start(); new Thread(){ public void run (){ td.get(500L); } }.start(); new Thread(){ public void run (){ td.get(100L); } }.start(); } public void show(){ System.out.println("=======show()========"); } public static void main(String[] args) { //调用 final TestThread ted = new TestThread(); ted.ing(); //来一个守护线程,监视看是不是所以的事情都做完了。做完了守护线程也跟着挂了 Thread tt = new Thread(){ public void run (){ while(true){ try { //守护线程每100ms检查一下各个线程的完成状况 Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //方法运行了3此,代码多做了,这是守护线程也要挂了,挂之前。。。。。 if(i==3){ ted.show(); ted.over(1); } } } }; tt.setDaemon(true); tt.start(); //ted.show(); 这个方法会同是运行 } }
这样做貌似也能达到要求。但是有明显的缺点。
第一:线程同时运行,必须用守护线程去执行线程做完以后将要运行的方法:这是不可取的,守护线程会立刻跟这死掉,如果将要做的事情的需要消耗大量的时间,或者开销的话,那么这个方法是不会正确执行的。【不知道具体原因,希望大鸟能指点迷津。】
第二:程序一执行,各个线程独立跑,守护线程只能监视各个线程的状态而无法获取各个线程所执行的事情是否成功了。这是相当不理想的。
策略二:Callable
public class HasValueThread { public void a(){ Callable ca1 = new Callable(){ @Override public Object call() throws Exception { System.out.println("==yes==="); return true; } }; Date d1 = new Date(); System.out.println("d1"+d1.toLocaleString()); //ExecutorService exec = Executors.newCachedThreadPool();//创建线程池 ExecutorService exec = Executors.newFixedThreadPool(7);//创建线程池 Callable c1 = new MyCallable("A",1000); Callable c2 = new MyCallable("B",5000); Callable c3 = new MyCallable("c",15000); Future f1 = exec.submit(c1); Future f2 = exec.submit(c2); Future f4 = exec.submit(c3); Future f3 = exec.submit(ca1); try { System.out.println(f1.get().toString()+System.currentTimeMillis()); System.out.println(f2.get().toString()+System.currentTimeMillis()); System.out.println(f4.get().toString()+System.currentTimeMillis()); System.out.println(f3.get().toString()+System.currentTimeMillis()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } exec.shutdown(); } public static void main(String[] args) { new HasValueThread().a(); System.out.println("------"); } } class MyCallable implements Callable{ private String oid; private long n; MyCallable(String oid,long n) { this.oid = oid; this.n = n; } @Override public Object call() throws Exception { Date d2 = new Date(); System.out.println("d2"+d2.toLocaleString()); Thread.sleep(n); return oid+"任务返回的内容"; } }
使用策略二的好处有:
第一:Callable 的好处是有返回值,也就是说一个线程是否成功完成了他的使命,我们可以从他的返回的结果中【自定义结果】中得知。
第二:ThreadPoolExecutor【写了一些并发包相关的博文放在草稿箱里没有发表出来,主要是怕错误太多 - -,贻笑大方】它提供了一个线程池,使用方法通常使用 Executors 工厂方法配置。 api说:线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。每个 ThreadPoolExecutor 还维护着一些基本的统计数据,如完成的任务数。用Executor提交一个带返回值的Callable到ExecutorService里面。返回只类型是Futrue[未来,很有意思]。更有意思的是他会等全部的Callable执行完了以后在往下走,当然需要控制的是:
//ExecutorService exec = Executors.newCachedThreadPool();//创建线程池 ExecutorService exec = Executors.newFixedThreadPool(7);//创建线程池
第一个newCachedThreadPool();他会启动n个线程来完成你的任务。他能自动线程回收。但是他的时间是60s.可以把这个demo跑下,发现让他sleep70秒他可以。这个问题我搞了很久没搞明白【求明白的分享】。所以我没用。用的是.newFixedThreadPool(7)参数能设置他的线程数。
总的来说还是那俩句话,一是分享,一是请教。谢谢
发表评论
-
使用 cxf axis1.x axis2 开发WebService
2014-02-26 14:50 1294cxf======================== ... -
基于red5 dsj 的java 处理视频流和一些疑问
2013-06-19 16:17 5587最近夭折了一个项目,由于我预研失败,同时我将被惩罚,被外派去 ... -
5分钟 熟练使用spring Aop
2013-06-09 09:56 4784声明:所有的5分钟系列博客都停留在使用的基础上,具体原理, ... -
5分钟 玩转google Gson
2013-06-05 17:18 10964google gson 是一个非常轻量的java 对象与j ... -
如何在springMVC 中对REST服务使用mockmvc 做测试
2013-06-05 09:06 46704spring 集成测试中 对mock 的集成实在是太棒了! ... -
struts2 上传下载模板
2012-04-20 09:38 2718第一 struts2 更新比较慢。核心的xwork 基本不变。 ... -
struts2 上传下载模板
2012-04-18 22:21 0struts2下载文件时出错提示:java.lang.Clas ... -
java乱码补充 : 移植乱码 问题
2012-04-18 12:00 1580上一篇: jquery ajax struts2 数据库等中 ... -
jquery ajax struts2 数据库等中文乱码问题解决大全
2012-04-18 09:31 4807ok 乱码了。 乱码第一件事,静下心来,思考一下这乱码出处的 ... -
java 内存的管理 转载▼
2012-04-17 16:39 1475java 内存的管理 转载▼ 内存的管理(1) 使用Ja ... -
边读边写【6】 ----序列化和反序列化
2012-04-16 15:26 0边读边写【6】 ----序列化和反序列化 -
边读边写【5】 ----java 并发包
2012-04-09 15:09 0java 并发包里面的几个常用的东西 ConCurrentH ... -
边读边写【2】 ----java 集合包之深入Map
2012-04-09 11:49 0Collection 中还有一个Set 但是常用的Set 都是 ... -
边读边写【3】 ----java 集合包之各个集合性能分析
2012-04-10 09:38 1858上次主要看了Map接口,以及Map的选择地址: 。http:/ ... -
边读边写【1】 ----java 集合包之深入List
2012-04-09 11:14 2524一、java 集合包最常用 ... -
hadoop的1TB排序
2012-04-09 09:22 1413hadoop的1TB排序 作者:nos ... -
java 调用lame.exe 将 wav 进行MP3压缩的一些问题
2012-03-05 10:24 5644首先下载附件 lame.exe copy到d 盘,因为代码默认 ... -
使用DES 加密方式对文件进行加密!!!
2012-01-14 17:07 7989DES加密由于在java中非常 ... -
java 大小端存储模式 转化
2012-01-14 16:52 14430所谓的大端模式:是指数据的高位,保存在内存的低地址中,而数据 ... -
myeclipse import sun.misc.BASE64Encoder与sun.misc.BASE64Decoder导入错误
2012-01-09 19:05 2181原因你的jre是myeclipse自带的,不是你安装jdk时候 ...
相关推荐
Java多线程实现数据切割批量执行,实现限流操作。 java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。...
资源分类:Python库 所属语言:Python 资源全名:more-executors-1.19.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Java中Executors类中几种创建各类型线程池方法及简单实例
1. 什么是线程? 2. 什么是线程安全和线程不安全? 3. 什么是⾃旋锁? 4. 什么是CAS? 5. 什么是乐观锁和悲观锁? 6. 什么是AQS? 7. 什么是原⼦操作?在Java Concurrency API中有哪些原⼦类(atomic classes)? 8. ...
看完《think in java》多线程章节,自己写的多线程文档,还结合了其他的相关网络资料。 线程 一. 线程池 1)为什么要使用线程池 2 2)一个具有线程池的工作队列 3 3)使用线程池的风险: 4 4)有效使用线程池的原则 5...
资源来自pypi官网。 资源全名:more_executors-2.5.1-py2.py3-none-any.whl
资源来自pypi官网。 资源全名:more_executors-1.1.0-py2.py3-none-any.whl
火花示例./spark/bin/spark-submit --master yarn-cluster --executor-memory 40g --executor-cores 32 --num-executors 2 --jars s3n://my-path/wen/libjars/argparse4j- 0.4.3.jar --class org.sparkexample....
主要介绍了Java并发编程中使用Executors类创建和管理线程的用法,文中举了用其启动线程和设置线程优先级的例子,需要的朋友可以参考下
Java并发编程中使用Executors类创建和管理线程的用法共4页.pdf.zip
JAVA线程基本学习, JAVA多线程的特性= 线程池: 本质上是一个对象池, 用来管理线程资源. 在任务执行前, 需要从线程池中拿出线程来执行. 在任务执行完成之后, 需要把线程放回线程池. 线程池好处: 降低资源的消耗...
本文的主题是关于具有java语言风格的Thread、synchronized、volatile,以及J2SE5中新增的概念,如锁(Lock)、原子性(Atomics)、并发集合类、线程协作摘要、Executors。开发者通过这些基础的接口可以构建高并发、线程...
Chapter 4, Thread Executors will teach the readers to delegate the thread management to executors. They allow running, managing, and getting the results of concurrent tasks. Chapter 5, Fork/Join ...
Java多线程 Java并发 [Java并发之线程池(二)之Executors] Java设计模式 Android UI控件篇 Android基础: Android自定义View篇 [自定义View--Canvas] [自定义View--Paint] [自定义View--Matrix] [自定义View--Path] ...
java简单线程池的实现,使用jdk的Executors.newFixedThreadPool方法来实现固定大小线程池
java7 hashmap源码 README 虽然JAVASE看完了,但仔细一想,好像有很多似懂非懂的知识点,好像会,但仔细一想,却不会。 因此重修JAVA 着重看集合,IO,多线程 泛型例子-->来自java编程思想--P397 Holder.java ...
7.登录mysql,将azkaban数据库下的executors表的active值改为1;否者启动程序会报azkaban.executor.ExecutorManagerException: No active executors found的异常。 use azkaban; update executors set active=1 ...
java Executors 使用实例 concurrent.ExecutorService