我爱看高清论坛

 找回密码
 立即注册
搜索
查看: 11992|回复: 44

求大佬帮忙改一下程序

[复制链接]
  • TA的每日心情
    慵懒
    2018-5-29 15:25
  • 签到天数: 123 天

    [LV.7]常住居民III

    高清中忍

    UID
    8864
    注册时间
    2017-10-18
    最后登录
    2020-5-17
    在线时间
    161 小时
    回帖
    678
    主题
    9
    精华
    0
    汤圆
    2822
    威望
    0
    积分
    1075
    阅读权限
    50
    发表于 2017-11-24 11:00:34 | 显示全部楼层
    声明:本站所有作品片源均来源于互联网公开渠道,影视版权均归原电影公司所有,如有侵犯版权,请与52khd@52khd.cn联系,我们将立即删除. 52KHD宗旨点击进入

    本帖最后由 0xFFFF00 于 2017-11-24 16:32 编辑

            作业题是要求用LinkedList 和 LinkedBlockingQueue分别写一个多线程生产者和消费者问题。我大致写好了,只是在运行的时候输出的东西有问题。现贴出代码,还请大佬指条路子。 下面首先放出作业要求里面的输出:

            The        following        is        an        example        output        for        1 producer        and        4 consumers,        using the       
    LinkedBlockingQueue<T>        implementation:
    "Producer 1": 100 events produced
    "Producer 1": 200 events produced
    "Producer 1": 300 events produced
    "Producer 1": 400 events produced
    "Consumer 1": 100 events consumed
    "Consumer 2": 100 events consumed
    "Producer 1": 500 events produced
    "Consumer 4": 100 events consumed
    "Consumer 3": 100 events consumed
    "Producer 1": 600 events produced
    "Producer 1": 700 events produced
    "Producer 1": 800 events produced
    "Consumer 1": 200 events consumed
    "Consumer 3": 200 events consumed
    "Producer 1": 900 events produced
    "Consumer 4": 200 events consumed
    "Consumer 2": 200 events consumed
    "Producer 1": 1000 events produced
    Summary:
    "Producer 1" produces 1000 events.
    "Consumer 1" consumes 252 events.
    "Consumer 2" consumes 246 events.
    "Consumer 3" consumes 255 events.
    "Consumer 4" consumes 247 events.



    上面的是LInkedBlockingQueue的输出,下面的是LinkedList的输出:

    The        following        is        an        example        output        for        1 producer        and        4 consumers,        using the       
    LinkedBlockingQueue<T>        implementation:
    "Producer 1": 100 events produced
    "Producer 1": 200 events produced
    "Producer 1": 300 events produced
    "Producer 1": 400 events produced
    "Consumer 1": 100 events consumed
    "Consumer 2": 100 events consumed
    "Producer 1": 500 events produced
    "Consumer 4": 100 events consumed
    "Consumer 3": 100 events consumed
    "Producer 1": 600 events produced
    "Producer 1": 700 events produced
    "Producer 1": 800 events produced
    "Consumer 1": 200 events consumed
    "Consumer 3": 200 events consumed
    "Producer 1": 900 events produced
    "Consumer 4": 200 events consumed
    "Consumer 2": 200 events consumed
    "Producer 1": 1000 events produced
    Summary:
    "Producer 1" produces 1000 events.
    "Consumer 1" consumes 252 events.
    "Consumer 2" consumes 246 events.
    "Consumer 3" consumes 255 events.
    "Consumer 4" consumes 247 events.


    下面是我写的代码,把t3, t4, t5拿掉还好。加上之后就有问题:

    1. //LinkedBlockingQueue

    2. //Main.java

    3. import java.util.concurrent.LinkedBlockingQueue;

    4. public class Main {

    5.         public static LinkedBlockingQueue<String> s = new LinkedBlockingQueue<String>(100);
    6.        
    7.         public static void main(String[] args) {
    8.                
    9.                 Consumer c = new Consumer();
    10.                 Producer p = new Producer();
    11.                
    12.                 try {
    13.                         Thread t1 = new Thread(p);
    14.                         Thread t2 = new Thread(c);
    15.                         //Thread t3 = new Thread(c);
    16.                         //Thread t4 = new Thread(c);
    17.                         //Thread t5 = new Thread(c);
    18.                
    19.                         t1.start();        // run t1
    20.                         t2.start();        // run t2
    21.                         //t3.start();
    22.                         //t4.start();
    23.                         //t5.start();
    24.                
    25.                         t1.join();        // wait until t1 completes
    26.                         t2.join();        // wait until t2 completes
    27.                         //t3.join();
    28.                         //t4.join();
    29.                         //t5.join();
    30.                        
    31.                         System.out.println("\nFinished producing...");
    32.                         System.out.println("Summary:");
    33.                         System.out.println("'Producer 1' produces " + p.counter + " events.\n");
    34.                         System.out.println("Finished consuming... ");
    35.                         System.out.println("'Consumer 1' consumes " + c.counter + " events.");
    36.                         //System.out.println("'Consumer 2' consumes " + c.counter + " events.");
    37.                         //System.out.println("'Consumer 3' consumes " + c.counter + " events.");
    38.                         //System.out.println("'Consumer 4' consumes " + c.counter + " events.");
    39.                        
    40.                 }catch(Exception e){
    41.                         e.printStackTrace();
    42.                 }
    43.         }
    44. }

    45. //Producer.java
    46. import java.util.Random;

    47. public class Producer implements Runnable{
    48.        
    49.         public int counter = 0;
    50.        
    51.         public void run() {
    52.                
    53.                 Random n = new Random();
    54.                 //Thread t = new Thread();
    55.                 System.out.println("Start producing... ");
    56.                 for(int i=0; i<1000; i++) {
    57.                        
    58.                         try {
    59.                                 double nextDouble = n.nextDouble();
    60.                                 Main.s.put(Double.toString(nextDouble));
    61.                                 counter++;
    62.                                 //System.out.println(nextDouble);
    63.                                 if (counter % 100 == 0) {
    64.                                         System.out.println("Producer progress " + counter);
    65.                                 }
    66.                         }catch(InterruptedException e) {               
    67.                         }
    68.                 }
    69.         }
    70. }

    71. //Consumer.Java
    72. import java.util.Random;

    73. public class Consumer implements Runnable{

    74.         public int counter = 0;
    75.        
    76.         public void run() {
    77.                
    78.                 Random n = new Random();
    79.                 //Thread t = new Thread();
    80.                 System.out.println("Start consuming... ");
    81.                 for(int i=0; i<1000; i++) {
    82.                        
    83.                         try {
    84.                                 Main.s.take();
    85.                                 Thread.sleep(n.nextInt(10));
    86.                                 counter++;
    87.                                 //System.out.println(Main.s);
    88.                                 if (counter % 100 == 0) {
    89.                                         System.out.println("Consumer progress "+ counter);
    90.                                 }
    91.                         }catch(InterruptedException e) {
    92.                                
    93.                         }
    94.                 }
    95.         }
    96. }
    复制代码



    下面这个是用LInkedList写的,还没有添加Producer2,3,4 和  Consumer2,3,4.
    1. //LinkedList

    2. //Main.java
    3. import java.util.LinkedList;
    4. public class Main {

    5.         public static LinkedList<String> ll = new LinkedList<String>();
    6.        
    7.         public static void main(String[] args) {
    8.                
    9.                 Consumer consumer = new Consumer();
    10.                 Producer p = new Producer();
    11.                
    12.                 try {
    13.                         Thread t1 = new Thread(consumer);
    14.                         Thread t2 = new Thread(p);
    15.                                
    16.                         t1.start();        // run t1
    17.                         t2.start();        // run t2
    18.                                
    19.                         t1.join();        // wait until t1 completes
    20.                         t2.join();        // wait until t2 completes
    21.                        
    22.                         System.out.println("\nFinished producing...\n");
    23.                         System.out.println("Summary:");
    24.                         System.out.println("'Producer 1' produces " + p.c + " events.\n");
    25.                         System.out.println("Finished consuming... ");
    26.                         System.out.println("'Consumer 1' consumes " + consumer.c + " events.");
    27.                        
    28.                         }catch(Exception e){
    29.                                 e.printStackTrace();
    30.                         }
    31.                 }
    32.         }

    33. //Producer.java
    34. import java.util.Random;

    35. public class Producer implements Runnable{

    36.         public int c = 0;
    37.         Random r = new Random();
    38.        
    39.         public void run() {
    40.                 System.out.println("Start producing... ");
    41.                 for (int i  =0; i < 1000; i++) {
    42.                         synchronized (Main.ll){
    43.                         try {
    44.                                 double nextDouble = r.nextDouble();
    45.                                 Main.ll.add(Double.toString(nextDouble));
    46.                                 c++;
    47.                                 if (c % 100 == 0) {
    48.                                         System.out.println("Producing progress:  " + c);
    49.                                 }
    50.                         }catch(Exception e) {
    51.                                
    52.                         }
    53.                         }
    54.                 }
    55.         }
    56. }

    57. .//Consumer.java
    58. import java.util.Random;

    59. public class Consumer implements Runnable{
    60.        
    61.         public int c = 0;
    62.        
    63.         public void run(){
    64.        
    65.                 Random r = new Random();
    66.                 System.out.println("Start consuming...");
    67.                
    68.                 while (Main.ll.size() != 0 || c != 1000) {
    69.                         synchronized(Main.ll) {
    70.                                 try {
    71.                                         Main.ll.remove();
    72.                                         Thread.sleep(r.nextInt(10));
    73.                                         c++;
    74.                                         if (c % 100 == 0) {
    75.                                                 System.out.println("Consume progress:  " + c);
    76.                                         }
    77.                                 }catch(Exception e) {
    78.                                        
    79.                                 }
    80.                         }
    81.                 }
    82.         }
    83.        
    84. }
    复制代码




    @shiting   @学联计算机培训

    回复

    使用道具 举报

  • TA的每日心情

    2021-12-25 16:15
  • 签到天数: 1358 天

    [LV.10]以坛为家III

    禁止访问

    UID
    7078
    注册时间
    2017-7-24
    最后登录
    2024-8-23
    在线时间
    651 小时
    回帖
    4006
    主题
    7
    精华
    0
    汤圆
    532
    威望
    2015
    积分
    4094
    阅读权限
    0
    发表于 2017-11-25 09:38:52 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-5-29 15:25
  • 签到天数: 123 天

    [LV.7]常住居民III

    高清中忍

    UID
    8864
    注册时间
    2017-10-18
    最后登录
    2020-5-17
    在线时间
    161 小时
    回帖
    678
    主题
    9
    精华
    0
    汤圆
    2822
    威望
    0
    积分
    1075
    阅读权限
    50
     楼主| 发表于 2017-11-25 09:48:02 | 显示全部楼层
    danny 发表于 2017-11-25 09:27
    楼主让我打开眼界了

    您老也让我开眼界了,每个帖子连着水两次确实是一个赚积分的好办法

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-8-3 01:17
  • 签到天数: 639 天

    [LV.9]以坛为家II

    禁止访问

    UID
    3091
    注册时间
    2016-10-26
    最后登录
    2020-12-2
    在线时间
    3252 小时
    回帖
    2136
    主题
    25
    精华
    1
    汤圆
    5830
    威望
    1501
    积分
    4896
    阅读权限
    0

    最佳新人活跃会员推广达人热心会员宣传达人灌水之王2周年勋章3周年勋章

    发表于 2017-11-25 11:57:48 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    6 天前
  • 签到天数: 1761 天

    [LV.Master]伴坛终老

    信息监察员

    UID
    2588
    注册时间
    2016-9-2
    最后登录
    2024-11-17
    在线时间
    1315 小时
    回帖
    12167
    主题
    501
    精华
    0
    汤圆
    282
    威望
    6
    积分
    12844
    阅读权限
    104

    最佳新人活跃会员热心会员灌水之王宣传达人

    发表于 2017-11-25 17:18:43 | 显示全部楼层
    本人电脑水平有限帮不了楼主。希望有别的大神能在此帖里回帖帮到楼主。

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    4 小时前
  • 签到天数: 2705 天

    [LV.Master]伴坛终老

    高清高层

    UID
    4184
    注册时间
    2017-1-22
    最后登录
    2024-11-17
    在线时间
    2454 小时
    回帖
    20512
    主题
    253
    精华
    0
    汤圆
    26786
    威望
    410
    积分
    21728
    阅读权限
    120

    最佳新人活跃会员热心会员

    发表于 2017-11-25 17:51:38 | 显示全部楼层
    这么专业的东西,我来开开眼界就好了。

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-7-23 00:47
  • 签到天数: 1328 天

    [LV.10]以坛为家III

    高清上忍

    UID
    6511
    注册时间
    2017-5-19
    最后登录
    2024-7-23
    在线时间
    269 小时
    回帖
    2394
    主题
    2
    精华
    0
    汤圆
    7338
    威望
    0
    积分
    2478
    阅读权限
    70
    发表于 2017-11-25 20:21:40 | 显示全部楼层
    表示看不懂的说

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-5-29 15:25
  • 签到天数: 123 天

    [LV.7]常住居民III

    高清中忍

    UID
    8864
    注册时间
    2017-10-18
    最后登录
    2020-5-17
    在线时间
    161 小时
    回帖
    678
    主题
    9
    精华
    0
    汤圆
    2822
    威望
    0
    积分
    1075
    阅读权限
    50
     楼主| 发表于 2017-11-26 10:35:53 | 显示全部楼层

    你抱楼上干嘛

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2 小时前
  • 签到天数: 2618 天

    [LV.Master]伴坛终老

    高清长老

    UID
    4787
    注册时间
    2017-2-21
    最后登录
    2024-11-17
    在线时间
    2068 小时
    回帖
    30295
    主题
    10
    精华
    0
    汤圆
    1500
    威望
    0
    积分
    31152
    阅读权限
    150

    最佳新人活跃会员热心会员灌水之王

    发表于 2017-11-27 16:03:54 | 显示全部楼层
    一陣眼花撩亂,只好看看大家的回帖,從中間學習點東西

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-7-23 00:47
  • 签到天数: 1328 天

    [LV.10]以坛为家III

    高清上忍

    UID
    6511
    注册时间
    2017-5-19
    最后登录
    2024-7-23
    在线时间
    269 小时
    回帖
    2394
    主题
    2
    精华
    0
    汤圆
    7338
    威望
    0
    积分
    2478
    阅读权限
    70
    发表于 2017-11-27 21:28:40 | 显示全部楼层

    估计是有受虐倾向:D

    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|Archiver|我爱看高清论坛 ( 鄂ICP备15010622号-1 )

    GMT+8, 2024-11-17 15:34

    Powered by 52KHD.CN

    © 2015-2023 俩木成林博客(看高清)

    快速回复 返回顶部 返回列表