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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

我来领题 :lol
回复 使用道具 举报
交题  :lol

Thread.rar

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

作业

评分

参与人数 1技术分 +1 收起 理由
王震阳老师 + 1 没有使用线程池

查看全部评分

回复 使用道具 举报
还没学到线程池 不过很期待技术分
回复 使用道具 举报

NX!这么快,都不带看API的啊。
回复 使用道具 举报
王老师您好,源代码如下,请批阅,谢谢!!

ThreadPoolDemo.zip

1.72 KB, 阅读权限: 200, 下载次数: 2

评分

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

查看全部评分

回复 使用道具 举报
刚刚学习API的,希望能进11期物联云计算,鼓励下吧。。。

TestThreadPoolExecutor.zip

6.3 KB, 阅读权限: 100, 下载次数: 1

评分

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

查看全部评分

回复 使用道具 举报
jzxyhjl 发表于 2014-7-15 14:16
线程池 练习的少 试试这个题

可以给大家借鉴一下,写的很好。
  1. package test;

  2. import java.util.concurrent.ExecutorService;
  3. import java.util.concurrent.Executors;
  4. import java.util.concurrent.ScheduledExecutorService;
  5. import java.util.concurrent.TimeUnit;
  6. /**
  7. * 线程池:单个线程池、固定大小的线程池、调度线程池(定时器)
  8. * @author asus
  9. *
  10. */

  11. public class ThreadPollTest {
  12.        
  13.         //测试运行
  14.         public static void main(String[] args) {
  15.                 Resource res = new Resource();
  16.                
  17. //                singleThreadPool(res);
  18. //                fixedThreadPool(res);
  19.                 scheduledThreadPool(res);
  20.         }
  21.        
  22.         //单个线程池,特点是:如果因为异常导致该线程意外终止,那么单个线程池会启动一个新的线程来代替已终止的线程,并且保证一次只启动一个线程
  23.         public static void singleThreadPool(final Resource res){
  24.                 //创建一个单个线程的线程池,用于生产线程
  25.                 ExecutorService producerPool = Executors.newSingleThreadExecutor();
  26.                 //启动线程池,这里需要向线程池提供一个Runnable对象,加入生产方法
  27.                 producerPool.execute(new Runnable(){
  28.                                 public void run(){
  29.                                         while(true){
  30.                                                 res.produce("生产者");
  31.                                         }
  32.                                 }
  33.                         });
  34.                 //同样创建一个单个线程池用于消费
  35.                 ExecutorService consumerPool = Executors.newSingleThreadExecutor();
  36.                 //启动线程池,提供一个Runnable对象,这里启动消费方法
  37.                 consumerPool.execute(new Runnable(){
  38.                                 public void run(){
  39.                                         while(true){
  40.                                                 res.consume("消费者");
  41.                                         }
  42.                                 }
  43.                         });
  44.         }
  45.        
  46.         //创建一个指定大小的线程池,特点:一个固定大小的线程池,如果所有线程都处于活动状态时,在有可用线程之前,其他任务将在队列中等待
  47.         public static void fixedThreadPool(final Resource res){
  48.                 //创建一个线程池,设置其中有4个可用线程
  49.                 ExecutorService pool = Executors.newFixedThreadPool(4);
  50.                 //内部类提供生产方法
  51.                 class Producer implements Runnable{
  52.                         public void run(){
  53.                                 while(true){
  54.                                         res.produce("生产者");
  55.                                 }
  56.                         }
  57.                 }
  58.                 //内部类提供消费方法
  59.                 class Consumer implements Runnable{
  60.                         public void run(){
  61.                                 while(true){
  62.                                         res.consume("消费者");
  63.                                 }
  64.                         }
  65.                 }
  66.                 //启动两个生产线程,两个消费线程
  67.                 pool.execute(new Producer());
  68.                 pool.execute(new Producer());
  69.                 pool.execute(new Consumer());
  70.                 pool.execute(new Consumer());
  71.         }
  72.        
  73.         //创建可调度的线程池,特点:可以设定延迟后运行线程,或者定期执行线程
  74.         public static void scheduledThreadPool(final Resource res){
  75.                 //创建一个可调度的线程池,设置其中有2个可用线程
  76.                 ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);
  77.                 //定时生产,调度线程池可以定时执行线程
  78.                 pool.scheduleAtFixedRate(new Runnable(){//设置要执行的任务,这里加入生产任务
  79.                                 public void run(){
  80.                                         res.produce("生产者");
  81.                                 }
  82.                         },
  83.                         0, //设定启动延迟时间,0表示立即启动
  84.                         3, //设定每个3秒执行一次
  85.                         TimeUnit.SECONDS);//设定时间单位为秒
  86.                 //定时消费
  87.                 pool.scheduleAtFixedRate(new Runnable(){//设置要执行的任务,这里加入消费任务
  88.                                 public void run(){
  89.                                         res.consume("消费者");
  90.                                 }
  91.                         },
  92.                         2, //设定启动延迟2秒
  93.                         3, //设定每个3秒执行一次
  94.                         TimeUnit.SECONDS);//设定时间单位为秒
  95.         }

  96. }
  97. //用于多线程执行的对象,生产者消费者的生产消费方法
  98. class Resource{
  99.         //产品数量,初始为0
  100.         private int count = 0;
  101.         //是否生产标志位,默认false,表示没有生产
  102.         private boolean isProduced = false;
  103.        
  104.         //生产方法,需要和消费方法进行同步
  105.         public synchronized void produce(String name){
  106.                 //判断是否已经生产,如果已经生产产品,生产者wait(),等待消费
  107.                 while(isProduced){
  108.                         try {
  109.                                 this.wait();
  110.                         } catch (InterruptedException e) {
  111.                                 e.printStackTrace();
  112.                         }
  113.                 }
  114.                 //表示生产了一个产品
  115.                 count++;
  116.                 //向控制台输出生产结果
  117.                 System.out.println(Thread.currentThread().getName()+"的"+name+":生产第"+count+"个产品");
  118.                 //将标志位设置成true,表示已经生产
  119.                 isProduced = true;
  120.                 //唤醒所有线程,避免都进入等待
  121.                 this.notifyAll();
  122.         }
  123.         //消费方法,需要和生产方法进行同步
  124.         public synchronized void consume(String name){
  125.                 //如果为false,表示没有产品,消费者wait(),等待生产
  126.                 while(!isProduced){
  127.                         try {
  128.                                 this.wait();
  129.                         } catch (InterruptedException e) {
  130.                                 e.printStackTrace();
  131.                         }
  132.                 }
  133.                 //向控制台输出消费结果
  134.                 System.out.println(Thread.currentThread().getName()+"的"+name+":消费第"+count+"个产品");
  135.                 //将标志位设置成false,表示已经消费
  136.                 isProduced = false;
  137.                 //唤醒所有线程,避免都进入等待
  138.                 this.notifyAll();
  139.         }
  140. }
复制代码
回复 使用道具 举报
郭可 发表于 2014-7-19 02:53
又来技术分了 好开心。。。

额 失误失误  看题没注意 。。。
回复 使用道具 举报
交作业了啊,麻烦阳哥了

Test.rar

882 Bytes, 阅读权限: 200, 下载次数: 1

评分

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

查看全部评分

回复 使用道具 举报
昏,不是21号截止吗,王哥上面公布答案了。。。。。
回复 使用道具 举报
hmid 来自手机 中级黑马 2014-7-21 20:07:31
111#
看看,手机上好像看不到
回复 使用道具 举报
郭可 发表于 2014-7-21 15:57
额 失误失误  看题没注意 。。。

学习了,谢谢阳哥
回复 使用道具 举报
我大阳阳哥威武 厚颜无耻 跪求技术分来了

MultiThreadTest.zip

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

评分

参与人数 1技术分 +1 收起 理由
王震阳老师 + 1 跟题意不符合

查看全部评分

回复 使用道具 举报
看看题目
回复 使用道具 举报
SurgeryThreadPool.zip (1.69 KB, 下载次数: 3)

评分

参与人数 1技术分 +3 收起 理由
王震阳老师 + 3 很给力!

查看全部评分

回复 使用道具 举报
阳哥,多出点活动题吧,加油争取11期!
回复 使用道具 举报
是时候上演真正的技术了!
回复 使用道具 举报
路过进来看看
回复 使用道具 举报
小乖乖灬浩歌 发表于 2014-7-21 21:50
我大阳阳哥威武 厚颜无耻 跪求技术分来了

线程池是个什么东东  毕老师的视频了没有说啊
回复 使用道具 举报
11111111111111111111111111111111
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马