Java线程:新特征-线程池

作者&投稿:步所 (若有异议请与网页底部的电邮联系)
~     Sun在Java 中 对Java线程的类库做了大量的扩展 其中线程池就是Java 的新特征之一 除了线程池之外 还有很多多线程相关的内容 为多线程的编程带来了极大便利 为了编写高效稳定可靠的多线程程序 线程部分的新增内容显得尤为重要       有关Java 线程新特征的内容全部在ncurrent下面 里面包含数目众多的接口和类 熟悉这部分API特征是一项艰难的学习过程 目前有关这方面的资料和书籍都少之又少 大所属介绍线程方面书籍还停留在java 之前的知识层面上       当然新特征对做多线程程序没有必须的关系 在java 之前通用可以写出很优秀的多线程程序 只是代价不一样而已       线程池的基本思想还是一种对象池的思想 开辟一块内存空间 里面存放了众多(未死亡)的线程 池中线程执行调度由池管理器来处理 当有线程任务时 从池中取一个 执行完成后线程对象归池 这样可以避免反复创建线程对象所带来的性能开销 节省了系统的资源       在Java 之前 要实现一个线程池是相当有难度的 现在Java 为我们做好了一切 我们只需要按照提供的API来使用 即可享受线程池带来的极大便利       Java 的线程池分好多种 固定尺寸的线程池 可变尺寸连接池       在使用线程池之前 必须知道如何去创建一个线程池 在Java 中 需要了解的是ncurrent Executors类的API 这个类提供大量创建连接池的静态方法 是必须掌握的   一 固定大小的线程池   import ncurrent Executors; import ncurrent ExecutorService; /** * Java线程 线程池 * * @author Administrator : : */ public class Test {         public static void main(String[] args) {                 //创建一个可重用固定线程数的线程池                 ExecutorService pool = Executors newFixedThreadPool( );                 //创建实现了Runnable接口对象 Thread对象当然也实现了Runnable接口                 Thread t = new MyThread();                 Thread t = new MyThread();                 Thread t = new MyThread();                 Thread t = new MyThread();                 Thread t = new MyThread();                 //将线程放入池中进行执行                 pool execute(t );                 pool execute(t );                 pool execute(t );                 pool execute(t );                 pool execute(t );                 //关闭线程池                 pool shutdown();         } } class MyThread extends Thread{         @Override         public void run() {                 System out println(Thread currentThread() getName()+ 正在执行 );         } }   pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 Process finished with exit code   二 单任务线程池       在上例的基础上改一行创建pool对象的代码为                 //创建一个使用单个 worker 线程的 Executor 以无界队列方式来运行该线程                 ExecutorService pool = Executors newSingleThreadExecutor();       输出结果为 pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 Process finished with exit code       对于以上两种连接池 大小都是固定的 当要加入的池的线程(或者任务)超过池最大尺寸时候 则入此线程池需要排队等待 一旦池中有线程完毕 则排队等待的某个线程会入池执行

    三 可变尺寸的线程池       与上面的类似 只是改动下pool的创建方式                 //创建一个可根据需要创建新线程的线程池 但是在以前构造的线程可用时将重用它们                 ExecutorService pool = Executors newCachedThreadPool();   pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 Process finished with exit code   四 延迟连接池   import ncurrent Executors; import ncurrent ScheduledExecutorService; import ncurrent TimeUnit; /** * Java线程 线程池 * * @author Administrator : : */ public class Test {         public static void main(String[] args) {                 //创建一个线程池 它可安排在给定延迟后运行命令或者定期地执行                 ScheduledExecutorService pool = Executors newScheduledThreadPool( );                 //创建实现了Runnable接口对象 Thread对象当然也实现了Runnable接口                 Thread t = new MyThread();                 Thread t = new MyThread();                 Thread t = new MyThread();                 Thread t = new MyThread();                 Thread t = new MyThread();                 //将线程放入池中进行执行                 pool execute(t );                 pool execute(t );                 pool execute(t );                 //使用延迟执行风格的方法                 pool schedule(t TimeUnit MILLISECONDS);                 pool schedule(t TimeUnit MILLISECONDS);                 //关闭线程池                 pool shutdown();         } } class MyThread extends Thread {         @Override         public void run() {                 System out println(Thread currentThread() getName() + 正在执行 );         } }   pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 Process finished with exit code

    五 单任务延迟连接池   在四代码基础上 做改动                 //创建一个单线程执行程序 它可安排在给定延迟后运行命令或者定期地执行                 ScheduledExecutorService pool = Executors newSingleThreadScheduledExecutor();   pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 Process finished with exit code   六 自定义线程池   import ncurrent ArrayBlockingQueue; import ncurrent BlockingQueue; import ncurrent ThreadPoolExecutor; import ncurrent TimeUnit; /** * Java线程 线程池 自定义线程池 * * @author Administrator : : */ public class Test {         public static void main(String[] args) {                 //创建等待队列                 BlockingQueue<Runnable> bqueue = new ArrayBlockingQueue<Runnable>( );                 //创建一个单线程执行程序 它可安排在给定延迟后运行命令或者定期地执行                 ThreadPoolExecutor pool = new ThreadPoolExecutor( TimeUnit MILLISECONDS bqueue);                 //创建实现了Runnable接口对象 Thread对象当然也实现了Runnable接口                 Thread t = new MyThread();                 Thread t = new MyThread();                 Thread t = new MyThread();                 Thread t = new MyThread();                 Thread t = new MyThread();                 Thread t = new MyThread();                 Thread t = new MyThread();                 //将线程放入池中进行执行                 pool execute(t );                 pool execute(t );                 pool execute(t );                 pool execute(t );                 pool execute(t );                 pool execute(t );                 pool execute(t );                 //关闭线程池                 pool shutdown();         } } class MyThread extends Thread {         @Override         public void run() {                 System out println(Thread currentThread() getName() + 正在执行 );                 try {                         Thread sleep( L);                 } catch (InterruptedException e) {                         e printStackTrace();                 }         } }

    pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 pool thread 正在执行 Process finished with exit code       创建自定义线程池的构造方法很多 本例中参数的含义如下

ThreadPoolExecutor

用给定的初始参数和默认的线程工厂及处理程序创建新的 ThreadPoolExecutor 使用 Executors 工厂方法之一比使用此通用构造方法方便得多 参数 corePoolSize 池中所保存的线程数 包括空闲线程 maximumPoolSize 池中允许的最大线程数 keepAliveTime 当线程数大于核心时 此为终止前多余的空闲线程等待新任务的最长时间 unit keepAliveTime 参数的时间单位 workQueue 执行前用于保持任务的队列 此队列仅保持由 execute 方法提交的 Runnable 任务 抛出 IllegalArgumentException 如果 corePoolSize 或 keepAliveTime 小于零 或者 maximumPoolSize 小于或等于零 或者 corePoolSize 大于 maximumPoolSize NullPointerException 如果 workQueue 为 null       自定义连接池稍微麻烦些 不过通过创建的ThreadPoolExecutor线程池对象 可以获取到当前线程池的尺寸 正在执行任务的线程数 工作队列等等       有关Java 线程池的内容到此就没有了 更多的内容还需要研读API来获取 lishixinzhi/Article/program/Java/hx/201311/26769




玩AVA画面过一会就一卡一卡的,再过一会儿就又好了,就这样一直重复_百度...
应该是有三种可能:一、您玩游戏的时候运行杀毒软件了,杀毒软件有时检测到有更新文件后会自动升级,这样就影响网速了,所以会卡。。。建议您玩AVA时关闭杀毒软件,因为玩AVA又不可能中毒。。。二、如果不想关闭杀毒软件,可以在杀毒软件的设置中,找到“游戏防打扰模式”,开启就OK,它就不会在您玩...

GeForce 7300 LE显卡玩AVA会咋样
于AVA战地之王的配置如下:配置要求:最低硬件需求:操作系统:Windows XP 处理器:支持超线程技术的Intel Pentium 4 内存:512MB(XP)或1GB(Vista)硬盘空间:8GB 显卡:NVIDIA GeForce 6600或更高级别、256MB显存、支持DirectX 9.0c和Shader Model 3.0 声卡:兼容DirectSound和DirectX 9.0c 推荐硬件...

我这系统以前玩战地之王FPS都是200现在不知道什么原因FPS很低。网速...
AVA是一款对CPU资源占用比较大的游戏,而且在优化方面做得也不好,你用的是AU,他的四核只相当于IU的双核,而且AU在多线程运算上比IU差很多,AVA是一款双核游戏,用不了四核,但是它对多线程运算要求很高,你用AU的四核跑AVA肯定不行,我用的AU六核FPS也才100多一点,但是你有预算换IU的I5 2300...

我的电脑是联想G455笔记本电脑玩AVA时CPU占用率老是100%怎么办?_百度...
具体原因:驱动程序导致的,不匹配的版本或新版本出问题 解决方法:用Process Explorer工具查看system的线程,看看哪些线程最活跃,CPU占用率最高,根据文件名判断是哪个驱动程序需要使用 故障名称:svchost.exe 具体原因:某个服务导致的 解决方法:用Process Explorer工具查看cpu使用率过高的svchost.exe进程中...

这款笔机本能玩战地之王AVA,孤岛危机,极品飞车13,魔兽世界吗_百度知 ...
完全可以,选择自动设置显示效果,会很好,不卡,fps有60以上应该能玩了。

类似于玩WOW或AVA这样大型3D的游戏 E5200合适还是8450合适 那8650呢...
这3 个U 玩游戏都足够了, 性能方面不会有任务能觉得到的差距,毕竟我们不是专业的硬件开发商.所以选哪个都可以的.E5200 45NS 的,功耗比AMD 要小些, 但少一些基本的指令集, 这也是有的人建议买E7+++ 的原因. 3核的在多线程方面有优势, 但现在游戏都支持到双核,但多核是一个方展方向, 所以...

...一般玩玩腾讯游戏就好了!像ava啊飞车啊!这些的!我比较喜欢枪战游戏...
楼上的一些什么。具体来说,我就不多说了,笔记本的散热确实是不如台式机,但将能够得到一个散热垫,只有30块钱,显卡也不是那么容易坏了,玩AVA和CF是没有问题的,但房东说,2500-3000书籍丧尸围城2和呼叫的召唤系列的危险,和3000 +的书几乎没有,但肯定是令人震惊的图片。顺便说一下,我的神舟...

AVA P 60-70 怎么办 我不算很卡就是有一点卡屏晃荡很不舒服我的电脑配置...
电脑很卡时,:1.系统会变慢,中毒后不少情况下会观察到系统变慢。2.网络游戏玩家会发现帐号被盗或装备被盗 电脑很卡解决办法 首先,宜使用金山毒霸或金山卫士对系统进行快速查杀,以排除病毒原因 首先应立即进行病毒检查,一般情况下使用金山毒霸2011或金山卫士2.1快速查杀就可以了。 快速查杀,可将正在...

...可以玩大一点的3D游戏,就像坦克世界和AVA不卡就好,价格也说下要换...
显卡换一个 独显,gt210就行 很便宜的 200多 内存2g ,价钱不到100

JAVA是什么软件?主要是干什么用的?
Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 。相关工作用途:1...

济阳县13618542917: java的线程池是什么,具体有什么用处 -
赧永新亚: java的线程池是通过HashMap获取当前的线程,保持线程同步

济阳县13618542917: java 什么是线程池及为什么要使用线程池 -
赧永新亚: 创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限.为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程.从JDK1.5开始,Java API提供了Executor框架让你可以创建不同的线程池.比如单线程池,每次处理一个任务;数目固定的线程池或者是缓存线程池(一个适合很多生存期短的任务的程序的可扩展线程池).

济阳县13618542917: 怎么理解java中的线程池? -
赧永新亚: 可以设置并自动创建线程的一种技术,目的就是为了减少创建线程重复的代码,自需要调个方法,就能调用线程和关闭线程

济阳县13618542917: java线程组,线程池,线程队列分别是什么?有什么区别? -
赧永新亚: 你好,我可以给你详细解释一下:线程组表示一个线程的集合.此外,线程组也可以包含其他线程组.线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组.允许线程访问有关自己的线程组的信息,但是不允许它访问...

济阳县13618542917: Java几种线程池类型介绍及使用 -
赧永新亚: 线程池作用就是限制系统中执行线程的数量. 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高.用线程池控制线程数量,其他线程 排队等候.一个任务执行完毕,...

济阳县13618542917: java 线程池机制的原理是什么? -
赧永新亚: 线程池属于对象池.所有对象池都具有一个非常重要的共性,就是为了最大程度复用对象.那么线程池的最重要的特征也就是最大程度利用线程.首先,创建线程本身需要额外(相对于执行任务而必须的资源)的开销.作业系统在每创建一个线程...

济阳县13618542917: Java线程池 -
赧永新亚: java常用的线程池有三种: 1. newFixedThreadPool public static ExecutorService newFixedThreadPool(int nThreads)创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程.在任意点,在大多数 nThreads 线程会处于处理...

济阳县13618542917: java 线程组和线程池的作用? -
赧永新亚: 一个线程的周期分为:创建、运行、销毁三个阶段.处理一个任务时,首先创建一个任务线程,然后执行任务,完了,销毁线程.而线程处于运行状态的时候,才是真的在处理我们交给它的任务,这个阶段才是有效运行时间.所以,我们希望花在创建和销毁线程的资源越少越好.如果不销毁线程,而这个线程又不能被其他的任务调用,那么就会出现资源的浪费.为了提高效率,减少创建和销毁线程带来时间和空间上的浪费,出现了线程池技术.这种技术是在开始就创建一定量的线程,批量处理一类任务,等待任务的到来.任务执行完毕后,线程又可以执行其他的任务.等不再需要线程的时候,就销毁.这样就省去了频繁创建和销毁线程的麻烦.

济阳县13618542917: Java 线程池 -
赧永新亚: 你说的这些本身就是线程池的作用,你可以去看一下ThreadPoolExecutor这个类,你说的它度能实现

济阳县13618542917: java常用的几种线程池实例讲解 -
赧永新亚: 下面给你介绍4种线程池:1、newCachedThreadPool:底层:返回ThreadPoolExecutor实例,corePoolSize为0;maximumPoolSize为Integer.MAX_VALUE;keepAliveTime为60L;unit为TimeUnit.SECONDS;workQueue为SynchronousQueue(同步...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网