这个必须要用线程的同步才可以做,打印星星不能再无条件的打印了
import java.util.concurrent.Phaserpublic 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()
}
这样基本改写成功。
如果需要源代码话,就联系我,我传给你,
代码改写不易,望采纳