首页 文章 精选 留言 我的

精选列表

搜索[jdk],共7531篇文章
优秀的个人博客,低调大师

重磅发布:阿里开源 Open JDK 长期支持版本 Alibaba Dragonwell

重磅发布:阿里开源 OpenJDK 长期支持版本 Alibaba Dragonwell 3 月 21 日北京阿里云峰会,阿里巴巴正式宣布对外开源 OpenJDK 长期支持版本 Alibaba Dragonwell。作为 Java 全球管理组织 Java Community Process (JCP) 的最高执行委员会的唯一中国代表,以及 Oracle 之外的 Java 生态中为数不多的 OpenJDK 定制者,Alibaba Dragonwell 的开源是阿里巴巴向全球 Java 开发者的重磅献礼。 北京阿里云峰会宣布 Alibaba Dragonwell 开源现场 这就是 Alibaba Dragonwell Alibaba Dragonwell 是一款免费的 OpenJDK 发行版。它提供长期支持,包括性能增强和安全修复。Alibab

优秀的个人博客,低调大师

JDK5.0新特性系列---11.2线程 任务执行架构

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(); } } 本文转自远哥博客园博客,原文链接:http://www.cnblogs.com/taven/archive/2011/12/17/2291469.html,如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。