A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王震阳老师   /  2014-7-15 14:02  /  21766 人查看  /  220 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

回帖领题
回复 使用道具 举报
看看       看看题
回复 使用道具 举报
回帖领题
回复 使用道具 举报
阳哥,我来看题啦啦
回复 使用道具 举报
姿_`态 发表于 2014-12-15 21:15
阳哥,我来看题啦啦

提交答案的时候记得提交截图。
回复 使用道具 举报
就业指导-王震阳老师 发表于 2014-12-15 22:33
提交答案的时候记得提交截图。

嗯呢 好的 。
回复 使用道具 举报
谢谢阳哥指导

ThreadPool.rar

43.69 KB, 阅读权限: 200, 下载次数: 1

评分

参与人数 1技术分 +1 收起 理由
王震阳老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报

写的很好:
  1. /*
  2. 需求:
  3.         通过查询JDK自带的线程池,学习线程池的使用方法。
  4.         并做以下练习:通过从线程池中获取的线程执行一个多线程任务(任务自定义)。
  5.         想得满分,至少得写出两种线程池的用法,并附带详细的注释。

  6. 查阅api
  7.         newFixedThreadPool
  8.                 public static ExecutorService newFixedThreadPool(int nThreads)创建一个可重用固定线程数的线程池,
  9.                 以共享的无界队列方式来运行这些线程。在任意点,在大多数 nThreads 线程会处于处理任务的活动状态。
  10.                 如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待。
  11.                 如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。
  12.                 在某个线程被显式地关闭之前,池中的线程将一直存在。
  13.         newScheduledThreadPool
  14.                 public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)创建一个线程池,
  15.                 它可安排在给定延迟后运行命令或者定期地执行。

  16.                 参数:
  17.                 corePoolSize - 池中所保存的线程数,即使线程是空闲的也包括在内。
  18.                 返回:
  19.                         新创建的安排线程池
  20. 思路:
  21.         1.定义一个专门用于操作线程池的类
  22.                 类中定义两个方法,分别是线程池的用法
  23.                 通过查阅api文档,书写线程池用噶
  24.         2.在main方法,中创建对象, 调用这两个方法
  25. */
  26. import java.util.concurrent.ExecutorService;
  27. import java.util.concurrent.Executors;
  28. import java.util.concurrent.ScheduledExecutorService;
  29. import java.util.concurrent.TimeUnit;

  30. class ThreadPool
  31. {
  32.         public static void main(String[] args)
  33.         {
  34.                 ThreadPool tp = new ThreadPool();
  35.                 tp.fixedThreadPool();
  36.                 try{Thread.sleep(1000);}catch(Exception e){}
  37.                 tp.scheduledThreadPool();
  38.                
  39.         }
  40.         public  void fixedThreadPool(){
  41.                 ExecutorService fixedThreadPool = Executors.newFixedThreadPool(2);//创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。这里设定的线程数是2
  42.                   for (int i = 0; i < 8; i++) {
  43.                    final int number = i;
  44.                    fixedThreadPool.execute(new Runnable() {//执行execute(Runnable command)  在将来某个时间执行给定任务。任务代码如下run方法中
  45.                         public void run() {
  46.                          try {
  47.                           System.out.println("fixedThreadPool..两个一起执行"+number);
  48.                           Thread.sleep(1000);
  49.                          } catch (InterruptedException e) {
  50.                           fixedThreadPool.shutdown();
  51.                           e.printStackTrace();
  52.                          }
  53.                         }
  54.                    });
  55.                   }
  56.        
  57.         }
  58.         public  void scheduledThreadPool(){
  59.                 ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);// 创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。这里延迟的时间设为1

  60.                   for (int i = 0; i < 8; i++) {
  61.                    final int number = i;
  62.                    scheduler.schedule(new Runnable() {//schedule(Runnable command, long delay, TimeUnit unit) 创建并执行在给定延迟后启用的一次性操作。操作的代码如下run方法中run方法中
  63.                           
  64.             public void run() {
  65.                          try {
  66.                                
  67.                           System.out.println("scheduler。。等待1s在执行"+number);
  68.                           Thread.sleep(1000);
  69.                          } catch (InterruptedException e) {
  70.                           e.printStackTrace();
  71.                          }
  72.                         }}, 3, TimeUnit.SECONDS);

  73.                   }
  74.        
  75.         }
  76. }
复制代码
回复 使用道具 举报
线程池,有听过,不知道怎么样,来做下
回复 使用道具 举报
回帖领题
回复 使用道具 举报
回帖领题
回复 使用道具 举报
今天上网看视频自学了线程池,但只是基本的了解,对于其中同步的方法不是很懂。。另外我不知道为什么当在同一个类中不能执行多个线程池,如果已有一个线程池,再定义一个线程池,就会停止上一个线程池的操作,不明白为什么~

无标题.png (203.28 KB, 下载次数: 14)

无标题.png

ThreadPool.rar

1.39 KB, 阅读权限: 200, 下载次数: 1

评分

参与人数 1技术分 +1 收起 理由
王震阳老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
风祭将o 发表于 2014-12-24 23:11
今天上网看视频自学了线程池,但只是基本的了解,对于其中同步的方法不是很懂。。另外我不知道为什么当在同 ...

很给力:
  1. package gaoxin;

  2. import java.util.concurrent.ExecutorService;
  3. import java.util.concurrent.Executors;

  4. /*
  5. *
  6. * 第五期
  7. *通过查询JDK自带的线程池,学习线程池的使用方法。
  8. *并做以下练习:通过从线程池中获取的线程执行一个多线程任务(任务自定义)。
  9. *想得满分,至少得写出两种线程池的用法,并附带详细的注释。
  10. **/
  11. //自定义一个线程类,继承了Thread
  12. class MyThread extends Thread {
  13.         int i = 0;

  14.         // 定义其中的run方法,方法是打印某线程在执行
  15.         public void run() {
  16.                 while (i++ < 3)
  17.                         System.out.println(this.getName() + "正在被执行。。。。。");
  18.         }
  19. }

  20. // 定义一个类,主要是为了让线程池执行里面的executeMethod方法。
  21. public class ThreadPool {
  22.         //定义一个执行方法,形参接受一个线程池
  23.         public static void executeMethod(ExecutorService es) {
  24.                 //让该线程池添加10个MyThread线程并执行。
  25.                 for (int x : new int[5]) {
  26.                         es.execute(new MyThread());
  27.                 }
  28.         }
  29. }

  30. //我分别用三个类来测试三个线程池,是因为线程池之间会相互影响。似乎同一个类中只能同时运行一个线程池?
  31. //单线程的线程池SingleThreadExecutor
  32. //这种线程池里只能同时运行一个线程,如果该线程在运行中因为异常结束了,线程池会重新创建一个线程继续执行。
  33. class SingleThread {
  34.         public static void main(String[] args) {
  35.                 //定义一个单线程的线程池
  36.                 ExecutorService singleThread = Executors.newSingleThreadExecutor();
  37.                 //提示这是执行哪个线程池
  38.                 System.out.println("这是执行singleThreadPool的结果:");
  39.                 //让它执行ThreadPool类中定义的执行方法。
  40.                 ThreadPool.executeMethod(singleThread);
  41.                 //执行完就关闭该线程池
  42.                 singleThread.shutdown();
  43.                 //在打印的结果中我们可以看到,它是按顺序执行的,意味着它每次都只能同时运行一个任务。
  44.         }
  45. }
  46. //可重用固定数量的线程池FixedThreadPool
  47. //这种线程池里可同时运行指定数量的线程,每完成了一个任务时就再创建一个线程去执行任务,直到线程数量达到线程池可同时运行的最大值。
  48. class FixedThread {
  49.         public static void main(String[] args) {
  50.                 //同上
  51.                 ExecutorService fixedThread = Executors.newFixedThreadPool(3);
  52.                 System.out.println("这是执行FixedThreadPool的结果:");
  53.                 ThreadPool.executeMethod(fixedThread);
  54.                 fixedThread.shutdown();
  55.                 //在打印的结果中,我们可以看到,
  56.                 //它在执行第一个任务后不断地创建新线程去执行余下的任务,直到线程数量达到了可允许的最大值。
  57.                 //观察结果可发现,它同时执行的线程不超过3个。
  58.         }
  59. }
  60. //可缓存的线程池CachedThreadPool
  61. //它也是在完成一个线程任务后再创建一个线程,但不同于fixedThreadPool的是它没有限制数量,
  62. //它里面所能容纳的最大线程数量理论上是依据计算机内存的大小而定的。
  63. //另外,当线程池大小超过需要运行的线程时,线程池就会回收空闲的线程。而任务增加时又将添加新线程来执行任务。
  64. class CachedThread {
  65.         public static void main(String[] args) {
  66.                 //同上
  67.                 ExecutorService cachedThread = Executors.newCachedThreadPool();
  68.                 System.out.println("这是执行CachedThreadPool的结果:");
  69.                 ThreadPool.executeMethod(cachedThread);
  70.                 cachedThread.shutdown();
  71.                 //在打印 的结果中,我们可以发现可缓存的线程池几乎可以同时运行所有线程。
  72.         }
  73. }
复制代码
回复 使用道具 举报
领题看看~~~~~~
回复 使用道具 举报
马上就要入学考试了,还差很多技术分,来领题
回复 使用道具 举报
佛说 发表于 2014-12-29 17:21
马上就要入学考试了,还差很多技术分,来领题

你的技术分已经够了呀
回复 使用道具 举报
多线程技术。java掌握的重点部分啊。
回复 使用道具 举报
领题试试看
回复 使用道具 举报
领以前的题
回复 使用道具 举报
求领题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马