修改一个Java程序

Python016

修改一个Java程序,第1张

这个必须要用线程的同步才可以做,打印星星不能再无条件的打印了

import java.util.concurrent.Phaser

public class StarPhaserDemo {

    public static void main(String args[]) {

     NewlinePhaser phsr = new NewlinePhaser(4,4)

        new StarThread(phsr)

        new StarThread(phsr)

        new StarThread(phsr)

        new StarThread(phsr)

    }

}

class NewlinePhaser extends Phaser {

private static int firstLineStartNum=4

int numPhases

int starNum=0

public NewlinePhaser(int numParties, int phases) {

super(numParties)

numPhases = phases

this.starNum=firstLineStartNum

}

public boolean onAdvance(int phase, int numParties) {

System.out.println() // print a newline

this.starNum=firstLineStartNum-phase-1

return phase == numPhases - 1 // stop after numPhases

}

public synchronized boolean canPrintStart(){

this.starNum--

return this.starNum>=0

}

}

class StarThread implements Runnable {

NewlinePhaser phsr

StarThread(NewlinePhaser p) {

phsr = p

new Thread(this).start()

}

public void run() {

while (!phsr.isTerminated()) {

if(phsr.canPrintStart()){

System.out.print('*')

}

phsr.arriveAndAwaitAdvance()

}

}

}

首先我先说下jdk是不支持泛型的,但是可以用强制转型的方式

1.去掉每个类的<>的东西,如改写成List sockets=new ArrayList()报错的地方用强制转型的方式改写,如(Socket) socket

2.ChatToMul这个类中for循环改写为Iterator

for(Iterator it = sockets.iterator()it.hasNext()){

Socket socketto = (Socket) it.next()

PrintWriter pw=MyUtil.getPrintWriter(socket)

PrintWriter pwto=MyUtil.getPrintWriter(socketto)

pw.println(socket.getRemoteSocketAddress().toString()+"对"+

socketto.getRemoteSocketAddress().toString()+"说:"+message)

pw.flush()

pwto.println(socket.getRemoteSocketAddress().toString()+"对"+

socketto.getRemoteSocketAddress().toString()+"说:"+message)

pwto.flush()

}

这样基本改写成功。

如果需要源代码话,就联系我,我传给你,

代码改写不易,望采纳