【只能实现一轮,多次往文件存的话第一轮结束之后就程序就挂起了,不会被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();


    }

参考

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();
 
 
    }

}