这怎么有意义呢?

时间:2015-08-07 23:17:48

标签: java

今天我发现了一个非常有趣的问题。基本上,如果删除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());
            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

LinkedList未同步。

在一个线程中对它的更改可能在另一个线程中不可见。尝试使用:

public static List<Player> queuedPlayers = 
     Collections.synchronizedList( new LinkedList<Player>() );

答案 1 :(得分:0)

我通过制作队列iron-selector解决了这个问题。 我不确定这样做是否有用,因为我不熟悉易用性,但它有效...