xinyi_java 2021-08-26 21:47 采纳率: 100%
浏览 55
已结题

【只能实现一轮,多次往文件存的话第一轮结束之后就程序就挂起了,不会被a线程唤醒】如何实现多次输入

创建2个线程a,b,2个线程同时写数据到write.txt,a线程写入字符串"How are you",b线程写入字符串"I am fine!",2个线程有序执行,一句How are you,对应一句 I am fine!。


public static void main(String[] args) {
        /**
         * 创建锁对象
         */
        Object object = new Object();
        /**
         * 创建线程a
         */
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    synchronized (object){
                            System.out.println("How are you");
                            FileWriter fileWriter = new FileWriter("g://write.txt", true);
                            PrintWriter printWriter = new PrintWriter(fileWriter);
                            /*a线程写入字符串"How are you"*/
                            printWriter.print(new StringBuilder().append("How are you").toString() + "\n");
                            fileWriter.close();
                            printWriter.close();
                        object.notify();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        },"a").start();

        /**
         * 创建线程b
         */
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    synchronized (object){
                            System.out.println("I am fine!");
                            FileWriter fileWriter = new FileWriter("g://write.txt", true);
                            PrintWriter printWriter = new PrintWriter(fileWriter);
                            /*b线程写入字符串"I am fine!*/
                            printWriter.print(new StringBuilder().append("I am fine!").toString() + "\n");
                            fileWriter.close();
                            printWriter.close();
                        object.wait();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        },"b").start();


    }
  • 写回答

1条回答 默认 最新

  • stacksoverflow 2021-08-27 06:17
    关注

    参考

    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args) {
            /**
             * 创建锁对象
             */
            Object object = new Object();
            /**
             * 创建线程a
             */
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        while(true) {
                            synchronized (object){
                                System.out.println("How are you");
                                FileWriter fileWriter = new FileWriter("g://write.txt", true);
                                PrintWriter printWriter = new PrintWriter(fileWriter);
                                /*a线程写入字符串"How are you"*/
                                printWriter.print(new StringBuilder().append("How are you").toString() + "\n");
                                fileWriter.close();
                                printWriter.close();
                                object.notify();
                                object.wait();
                            }
                        }
                    
    
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            },"a").start();
     
            /**
             * 创建线程b
             */
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        while(true) {
                            synchronized (object){
                                System.out.println("I am fine!");
                                FileWriter fileWriter = new FileWriter("g://write.txt", true);
                                PrintWriter printWriter = new PrintWriter(fileWriter);
                                /*b线程写入字符串"I am fine!*/
                                printWriter.print(new StringBuilder().append("I am fine!").toString() + "\n");
                                fileWriter.close();
                                printWriter.close();
                                object.notify();
                                object.wait();
                            }
                        }
    
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            },"b").start();
     
     
        }
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月4日
  • 已采纳回答 8月27日
  • 创建了问题 8月26日

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 在使用pyecharts时出现问题
  • ¥15 深度学习残差模块模型
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计