Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java多线程技术打印Floyd三角形_Java_Multithreading - Fatal编程技术网

用java多线程技术打印Floyd三角形

用java多线程技术打印Floyd三角形,java,multithreading,Java,Multithreading,我想用两条线来打印Floyd三角形(假设一条线打印数字,另一条线打印行中的数字),如下所示 以此类推,直到最大值,在这种情况下为15 我试着跟随,但它一直在每行打印一个数字 public class MyThread extends Thread{ static volatile int lineNumber = 1; public static void main(String... args) { PrintFloyd print = new PrintF

我想用两条线来打印Floyd三角形(假设一条线打印数字,另一条线打印行中的数字),如下所示

以此类推,直到最大值,在这种情况下为15

我试着跟随,但它一直在每行打印一个数字

public class MyThread extends Thread{
    static volatile int lineNumber = 1;

    public static void main(String... args) {
        PrintFloyd print = new PrintFloyd();
        Thread t1 = new Thread(new TaskHandler(print, 10), "T1");
        Thread t2 = new Thread(new TaskHandler(print, 10), "T2");
        t1.start();
        t2.start();
    }
}

class TaskHandler implements Runnable {

    static volatile int i = 1;
    static volatile int lineCount = 1;
    static volatile int lineNumber = 1;
    private int max;
    private PrintFloyd print;

    TaskHandler(PrintFloyd print2, int max) {
        this.print = print2;
        this.max = max;
    }

    @Override
    public void run() {
        System.out.println(">>>>" + Thread.currentThread().getName());
        while(i < max){
            if (Thread.currentThread().getName().equals("T1")){
                print.printNumber(i);
            } else {
                print.breakLine();
            }           
        } 
    }
}

class PrintFloyd {

    boolean isBreakPoint = false;

    public void printNumber(int i) {

        synchronized(this){
            while (isBreakPoint == false) {
                try {
                    wait();
                } catch (InterruptedException ex) {

                }
                System.out.print(i++ + " ");
                isBreakPoint = false;
                notifyAll();
            }
        }
    }

    public void breakLine(){
        synchronized(this){

            while (isBreakPoint == true) {
                try {
                    wait();
                } catch (InterruptedException ex) {

                }
            }
            System.out.println();
            isBreakPoint = true;
            notifyAll();
        }
    }
}
公共类MyThread扩展线程{
静态易失性int lineNumber=1;
公共静态void main(字符串…参数){
PrintFloyd print=新的PrintFloyd();
线程t1=新线程(新任务处理器(打印,10),“t1”);
线程t2=新线程(新任务处理器(打印,10),“t2”);
t1.start();
t2.start();
}
}
类TaskHandler实现可运行{
静态挥发性int i=1;
静态volatile int lineCount=1;
静态易失性int lineNumber=1;
私人int max;
私人印刷;弗洛伊德印刷;
TaskHandler(PrintFloyd print2,int max){
this.print=print2;
this.max=max;
}
@凌驾
公开募捐{
System.out.println(“>>>>”+Thread.currentThread().getName());
而(i
以下代码将有所帮助:

具有2个读取的公共类PrintPattern{

final static int MAX = 15;
final static String itemWriterName = "itemWriter";
final static String newLineWriterName = "newLineWriter";

public static void main(String[] args) {

    Printer print = new Printer(MAX);

    Thread itemWriter = new Thread(new ItemWriter(print), itemWriterName);
    itemWriter.start();
    Thread newLineWriter = new Thread(new NewLineWriter(print), newLineWriterName);
    newLineWriter.start();
}
}

类ItemWriter实现可运行{

private Printer print;

ItemWriter(Printer print) {
    this.print = print;
}

public void run() {
    while (print.current <= print.MAX) {
        print.printNumber();
    }
}
private Printer print;

NewLineWriter(Printer print) {
    this.print = print;
}

public void run() {
    while (print.current <= print.MAX) {
        print.printNewLine();
    }
}
专用打印机打印;
ItemWriter(打印机打印){
this.print=打印;
}
公开募捐{

虽然(print.current您想这样做,还是希望有人为您编写?如果是后者,这不是StackOverflow的目的。请添加您尝试的代码编辑也不清楚您为什么需要或想要线程。如何编辑问题以添加我的code@cricket_007如何编辑我的问题?在评论部分上方有一个编辑链接,谢谢s@Surender这正是我想要的。我错误地调用了wait()和notifyAll()。
public final int MAX;
public int current = 1;
public int itemsInALine = 1;

Printer(int max) {
    this.MAX = max;
}

public void printNumber() {
    synchronized(this) {
        for(int i = current; i < current + itemsInALine && i <= MAX; i++) {
            System.out.print(i + " ");
        }
        this.current = current + itemsInALine;
        itemsInALine++;
        notifyAll();
        try {
            if(this.current < MAX) {
                wait();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

public void printNewLine() {
    synchronized(this) {
        System.out.println();
        notifyAll();
        try {
            wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}