Entity.java Source code

Java tutorial

Introduction

Here is the source code for Entity.java

Source

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Phaser;
import java.util.concurrent.atomic.AtomicInteger;

abstract class Entity implements Runnable {
    public abstract void run();
}

class WorkerA extends Entity implements Runnable {
    AtomicInteger idSource = new AtomicInteger();

    public void run() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
    }

    @Override
    public String toString() {
        int id = idSource.incrementAndGet();
        return "# " + id;
    }
}

class WorkB extends Entity implements Runnable {
    AtomicInteger idSource = new AtomicInteger();

    public void run() {
        try {
            Thread.sleep(400);
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
    }

    @Override
    public String toString() {
        int id = idSource.incrementAndGet();
        return "ID:" + id;
    }
}

public class Test {
    private static void gameEngine(List<Entity> entities) {
        final Phaser phaser = new Phaser(1);
        for (final Entity entity : entities) {
            final String member = entity.toString();
            System.out.println(member);
            phaser.register();
            new Thread() {
                @Override
                public void run() {
                    System.out.println(member);
                    phaser.arriveAndAwaitAdvance();
                    entity.run();
                }
            }.start();
        }
        phaser.arriveAndDeregister();
    }

    public static void main(String[] args) {
        List<Entity> entities = new ArrayList<>();
        entities = new ArrayList<>();
        entities.add(new WorkerA());
        entities.add(new WorkB());
        gameEngine(entities);
    }
}