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日

悬赏问题

  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?