Consumer.java 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package J20250804.demo02;
  2. import java.io.BufferedWriter;
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. import java.util.concurrent.BlockingQueue;
  6. /**
  7. * @author WanJl
  8. * @version 1.0
  9. * @title Consumer
  10. * @description
  11. * @create 2025/8/4
  12. */
  13. public class Consumer implements Runnable{
  14. private String outputFile;
  15. private BlockingQueue<String> queue;
  16. //true 偶数,false为奇数
  17. private boolean isEvenConsumer;
  18. public Consumer(String outputFile, BlockingQueue<String> queue,boolean isEvenConsumer) {
  19. this.outputFile = outputFile;
  20. this.queue=queue;
  21. this.isEvenConsumer=isEvenConsumer;
  22. }
  23. @Override
  24. public void run() {
  25. BufferedWriter bw = null;
  26. try{
  27. bw=new BufferedWriter(new FileWriter(outputFile));
  28. while (!queue.isEmpty()){
  29. //从队列中获取数据,如果队列空了会阻塞等待
  30. String data = queue.take();
  31. try{
  32. //把字符串转换为整数
  33. int i = Integer.parseInt(data);
  34. //根据消费者的类型判断是否处理当前的数字
  35. if (isEvenConsumer&&i%2==0||!isEvenConsumer&&i%2!=0){
  36. bw.write(data);
  37. bw.newLine();
  38. }
  39. }catch (NumberFormatException e){
  40. System.out.println("忽略非数字数据:"+data);
  41. }
  42. }
  43. } catch (IOException | InterruptedException e) {
  44. e.printStackTrace();
  45. }finally {
  46. try {
  47. bw.close();
  48. } catch (IOException e) {
  49. e.printStackTrace();
  50. }
  51. }
  52. }
  53. }