- 浏览: 33197 次
- 性别:
- 来自: 北京
-
最新评论
-
Corwen:
INSERT ... ON DUPLICATE KEY UPD ...
mysql insert的几点操作(DELAYED 、IGNORE、ON DUPLICATE KEY UPDATE )
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; /** 在J2SE之前启动一个任务是通过调用Thread类的start方法来实现的,任务的提交和执行是同时进行的,如果想对任务的执行进行调度,或是控制同时执行的线程数量就需要额外的编写代码来完成. J2SE5.0提供了一个新的任务执行架构,可以轻松地高度和控制任务的执行,并且可以建立一个线程池来执行任务. 实例介绍如何使用新的任务执行架构,运行Runnable和Callable任务,包括定时执行任务,按规律执行任务和停止任务. 关键技术剖析: 使用新的任务执行框架的关键技术如下: 1.Executor服务对象是用来执行Runnable任务的,常用的方法如下: execute方法用于执行Runnable类型的任务. 2.ExecutorService服务对象能执行和终止Callable任务,它继承了Executor,所以也能执行Runnable任务.常用的方法如下 a) submit方法用来提交Callable或Runnable任务,并返回代表此任务的Future对象. b) invokeAll方法批处理任务集合,并返回一个代表这些任务的Future对象集合 c) shutdown方法在完成自己已提交的任务后关闭服务,不再接受新任务. d) shutdownNow方法停止所有正在执行的任务并关闭服务. e) isTerminated测试是否所有任务都执行完毕了 g) isShutdown测试是否该ExecutorService已被关闭 3.ScheduledExecutorService服务对象继承ExecutorService,提供了按时间安排执行任务的功能.常用的方法如下: a)schedule(task,initDelay)方法安排所提交的Callable或Runnable任务在initDelay指定的时间后执行. b)scheduleAtFixedRate方法安排所提交的Runnable任务按指定的间隔重复执行. c)scheduleWithFixedDelay方法安排所提交的Runnable任务在每次执行完后,等待delay所指定的时间后重复执行. 4.Executors类用来创建各种服务对象,常用的方法如下: a)callable(Runnable task)方法将Runnable的任务转化成Callable的任务. b)newSingleThreadExecutor方法产生一个ExecutorService对象,这个对象带有一个线程池,线程池的大小会根据需要调整,线程执行完任务后返回线程池,供执行下一次任务使用. c)newCachedThreadPool方法会产生一个ExecutorService对象,这个对象带有一个线程池,线程池的大小会根据需要调整,线程执行完任务后返回线程池,供执行下一次任务使用. d)newFixedThreadPool(int poolSize)方法产生一个ExecutorService对象,这个对象带有一个大小为poolSize的线程池,若任务数量大于poolSize,任务会被放在一个队列里顺序执行. e)newSingleThreadScheduledExecutor方法产生一个ScheduledExecutorService对象,这个对象的线程池大小为1,若任务多于一个,任务将按先后顺序执行. f)newScheduledThreadPool(int poolSize)方法产生一个ScheduledExecutorService对象,这个对象的线程池大小为poolSize,若任务数量大于poolSize,任务会在一个队列里等待执行. */ public class ExecuteArch { /**该线程输出一行字符串*/ public static class MyThread implements Runnable{ public void run(){ System.out.println("Task repeating. " + System.currentTimeMillis()); try{ Thread.sleep(1000); }catch(InterruptedException e){ System.out.println("Task interrupted. " + System.currentTimeMillis()); } } } /**该Callable结束另一个任务*/ public static class MyCallable implements Callable{ private Future future; public MyCallable(Future future){ this.future = future; } public String call(){ System.out.println("To cancell Task..." + System.currentTimeMillis()); this.future.cancel(true); return "Task cancelled!"; } } public static void main(String... args)throwsInterruptedException,ExecutionException{ //产生一个ExcutorService对象,这个对象带有一个线程池,线程池的大小会根据需要调整 //线程执行完任务后返回线程池,供执行下一次任务使用 ExecutorService cachedService = Executors.newCachedThreadPool(); Future myThreadFuture = cachedService.submit(new MyThread()); Future myCallableFuture = cachedService.submit(newMyCallable(myThreadFuture)); System.out.println(myCallableFuture.get()); System.out.println("--------------------"); //将Runnable任务转换成 Callable任务 Callable myThreadCallable = Executors.callable(new MyThread()); Future myThreadCallableFuture = cachedService.submit(myThreadCallable); //对于Runnable任务,转换成Callable任务后,也没有返回值 System.out.println(myThreadCallableFuture.get()); cachedService.shutdownNow(); System.out.println("--------------------"); //产生一个ExecutorService对象,这个对象带有一个大小为poolSize的线程池 //若任务大于poolSize,任务会被放在一个queue里顺序执行 ExecutorService fixedService = Executors.newFixedThreadPool(2); fixedService.submit(new MyThread()); fixedService.submit(new MyThread()); //由于线程池大小为2,所以后面的任务必须等待前面的任务执行完毕后才能被执行 myThreadFuture = fixedService.submit(new MyThread()); myThreadFuture = fixedService.submit(new MyCallable(myThreadFuture)); System.out.println(myCallableFuture.get()); fixedService.shutdown(); System.out.println("--------------------"); //产生一个ScheduleExecutorService对象,这个对象的线程池大小为poolSize //若任务数量大于poolSize,任务会在一个queue里等待执行 ScheduledExecutorService fixedScheduledService = Executors.newScheduledThreadPool(2); MyThread task1 = new MyThread(); //使用任务执行服务立即执行任务1,而且此后每隔2秒执行一次任务1 myThreadFuture = fixedScheduledService.scheduleAtFixedRate(task1, 0, 2, TimeUnit.SECONDS); MyCallable task2 = new MyCallable(myThreadFuture); //使用任务执行服务等待5秒后执行任务2,执行它后将任务1关闭. myCallableFuture = fixedScheduledService.schedule(task2,5,TimeUnit.SECONDS); System.out.println(myCallableFuture.get()); fixedScheduledService.shutdownNow(); } }
发表评论
-
apache 中的EqualsBuilder和HashCodeBuilder
2012-05-04 10:27 1025自动化hashCode()和equals() 问题产生:当需 ... -
Java 中的Double Check Lock
2012-05-03 10:53 1648对于多线程编程来说 ... -
JDK5.0新特性系列---11.4线程 Condition
2012-05-02 11:05 813import java.util.concurrent. ... -
JDK5.0新特性系列---11.6线程 BlockingQueue
2012-05-02 11:05 794importjava.util.concurrent. ... -
JDK5.0新特性系列---11.5.4线程 同步装置之Exchanger
2012-05-02 11:05 747/** * Exchanger让两个线程互换信息 ... -
JDK5.0新特性系列---11.5.2线程 同步装置之CountDownLatch
2012-05-02 11:05 858import java.util.concurrent ... -
JDK5.0新特性系列---11.5.1线程 同步装置之Semaphore
2012-05-03 10:54 766import java.util.ArrayList; ... -
JDK5.0新特性系列---11.3线程 锁Lock
2012-05-03 10:54 795import java.util.concurrent. ... -
JDK5.0新特性系列---11.1线程 Callable和Future
2012-05-03 10:54 1229import java.util.concurrent. ... -
JDK5.0新特性系列---8.泛型编程
2012-04-28 08:58 849import java.util.ArrayList; ... -
JDK5.0新特性系列---10.监控与管理虚拟机
2012-04-28 08:58 904import java.lang.management ... -
JDK5.0新特性系列---9.注释功能Annotation
2012-04-28 08:58 823import java.lang.annotation. ... -
JDK5.0新特性系列---7.使用ProcessBuilder执行本地命令
2012-04-28 08:57 943import java.io.BufferedReade ... -
JDK5.0新特性系列---6.格式化输出
2012-04-28 08:57 628import java.util.Date; / ... -
JDK5.0新特性系列---5.可变长参数Varargs
2012-04-26 21:53 598/** * 在J2SE5.0之前,当传入到方法的参数 ... -
JDK5.0新特性系列---4.静态导入
2012-04-26 21:51 739/** *静态导入:是指可以import类的静态方法 ... -
JDK5.0新特性系列---3.枚举类型
2012-04-26 21:50 642/** *enum关键字表示枚举类型,它的作用相当于 ... -
JDK5.0新特性系列---2.新的for循环
2012-04-26 21:48 688import java.util.ArrayList; ... -
JDK5.0新特性---1.自动装箱和拆箱
2012-04-26 21:44 887/** * 基本类型的数据值可以直接赋给基本数据对象 ... -
JAVA移位运算符)
2012-04-20 13:32 860移位运算符就是在二 ...
相关推荐
- **兼容性**:与JDBC 3.0和4.0标准兼容,支持JDK 5.0及更高版本。 3. **使用OJDBC驱动** 要使用OJDBC驱动,你需要在Java项目中添加对应的jar文件,例如`ojdbc6.jar`或`ojdbc7.jar`。然后,通过以下代码创建...
《Java JDK 7学习笔记》针对Java SE 7新功能全面改版,无论是章节架构或范例程序代码,都做了全面重新编写与翻新。 《Java JDK 7学习笔记》是作者多年来教学实践的经验总结,汇集了学员在教学过程中遇到的概念、...
- **面向对象**:Java是一种纯面向对象的语言,支持封装、继承和多态等特性。 - **安全性**:具有内存管理机制,减少了内存泄漏等问题。 - **高性能**:通过JIT编译器和GC垃圾回收机制提高了执行效率。 ##### 1.4 ...
1.2 实验1 JDK 5.0路径设置 1.3 实验2 在DOS环境下编译和运行Application和Applet程序 1.4 实验3 在JBuilder 2005中配置JDK 5.0编译环境 1.5 实验4 在JBuilder 2005中开发Application和Applet程序 第2章 基本...
多线程允许程序同时执行多个任务,提高程序的并发性。 #### 12.2 线程的生命周期 线程的生命周期包括新建、就绪、运行、阻塞和终止五个状态。 #### 12.3 线程的调度和优先级 线程调度决定了线程执行的顺序,...
12.5.3 使用JDK5.0后提供的并发集合类324 12.6 用Timer类调度任务325 12.7 本章练习326 第13章 13.1 java.io.File类328 13.1.1 文件和目录是什么?328 13.1.2 Java对文件和目录的操作328 13.2 JavaIO原理332 13.3 流...
Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升...
Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升...
17.1.2 JavaSE 5.0中固定尺寸线程池的基本知识 374 17.1.3 自定义尺寸固定线程池的使用 375 17.1.4 单任务线程池的使用 377 17.1.5 可变尺寸线程池的使用 378 17.1.6 延迟线程池的使用 380 17.1.7 使用...