== null无效java

时间:2016-11-03 21:57:10

标签: java

我已经为对象预留了一个区域的座位。但是如果两个物体同时进入该功能,他们就会获得相同的座位。我该如何解决这个问题?

函数getFreeChairs,返回主席位置。并设置风扇。但如果两个粉丝同时进入,他们都会得到相同的座位。

斯文

package model;

import actors.Fan;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by sveno on 12-10-2016.
 */
public class Vak {
    private static int autoId = 1;
    private String naam;
    private int rijen, stoelenperrij, id;
    private List<ArrayList> rows = new ArrayList<>();
    private Fan fan = null;

    public Vak(String naam, int rijen, int stoelenperrij) {
        this.naam = naam;
        this.rijen = rijen;
        this.stoelenperrij = stoelenperrij;
        this.id = autoId;
        autoId++;

        for (int i = 0; i < rijen; i++) {
            rows.add(new ArrayList<Fan>());
        }

        for (ArrayList row : rows) {
            for (int j = 0; j < stoelenperrij; j++) {
                row.add(fan);
            }
        }

    }
    public void removeReserved(int rij, List<Integer> stoelen){
        for (int i = 0; i < stoelen.size()-1; i++) {
            //De reserveer alle stoelen
            ArrayList<Fan> stoel = rows.get(rij);
            stoel.set(stoelen.get(i),fan);
        }
    }

    public int getRijen() {
        return rijen;
    }

    public int getStoelenperrij() {
        return stoelenperrij;
    }

    public List<ArrayList> getRows() {
        return rows;
    }

    public int[] getFreeChairs(int aantalStoelen, Fan fan){
        //Check for free seats
        int count = 1;
        int[] stoelenleeg = new int[aantalStoelen+1];
            for (int j = 0; j < rows.size(); j++) {
                for (int k = 0; k < rows.get(j).size(); k++) {
                    if (rows.get(j).get(k) == null){
                        stoelenleeg[count-1] = k;
                        count++;
                        //Not enough seats next to each other
                        if(count==aantalStoelen+1){
                            stoelenleeg[aantalStoelen] = j+1;
                            for (int o = 0; o < stoelenleeg.length-1; o++) {
                                ArrayList<Fan> stoel = rows.get(j);
                                stoel.set(stoelenleeg[o],fan);
                            }
                            return stoelenleeg;
                        }
                    }else{
                        //Not enough seats
                        stoelenleeg = new int[aantalStoelen+1];
                        count=1;
                    }
                }
            }
        return stoelenleeg;
    }
}

1 个答案:

答案 0 :(得分:1)

如果您的代码在并发上下文(多个线程)中使用,则需要确保您的代码是线程安全的。 这意味着,只有一个线程(人)应该能够调用getFreeChairs函数(一次预留一个座位) 在java中执行此操作的简便方法是使用方法定义中的synchronized键:

public synchronized int[] getFreeChairs(int aantalStoelen, Fan fan){
   ...
}