首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这又有什么意义呢?

这又有什么意义呢?
EN

Stack Overflow用户
提问于 2015-08-08 07:17:48
回答 2查看 71关注 0票数 0

今天我发现了一个很有趣的问题。基本上,如果您删除System.out.println,此代码将不起作用。如果没有它,它永远不会进入if!(线程从主类启动)

代码语言:javascript
复制
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());
            }
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2015-08-08 07:33:05

LinkedList未同步。

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

代码语言:javascript
复制
public static List<Player> queuedPlayers = 
     Collections.synchronizedList( new LinkedList<Player>() );
票数 2
EN

Stack Overflow用户

发布于 2015-08-08 07:45:39

我通过将队列设置为volatile解决了这个问题。我不确定这样做是否好,因为我不熟悉volatile的用法,但它很有效……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31887938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档