今天我发现了一个非常有趣的问题。基本上,如果删除System.out.println,此代码不起作用。如果没有它,它永远不会进入内部! (线程从主类开始)
import java.util.LinkedList;
import java.util.Vector;
import java.util.Queue;
public class Matchmaking extends Thread{
public static Vector onlinePlayers = new Vector();
public static Queue<Player> queuedPlayers = new LinkedList<Player>();
@Override
public void run() {
while(true){
System.out.println(queuedPlayers.size());
if(queuedPlayers.size() >= 2){
new Matchmaking_GameFoundThreads(queuedPlayers.remove(),queuedPlayers.remove());
}
}
}
}
答案 0 :(得分:2)
LinkedList未同步。
在一个线程中对它的更改可能在另一个线程中不可见。尝试使用:
public static List<Player> queuedPlayers =
Collections.synchronizedList( new LinkedList<Player>() );
答案 1 :(得分:0)
我通过制作队列iron-selector
解决了这个问题。
我不确定这样做是否有用,因为我不熟悉易用性,但它有效...