java actor模型和消息传递简单示例

接上面java actor模型框架ujavaactor http://zhwj184.iteye.com/admin/blogs/1613351,上面的示例比较复杂,写一个简单点的示例:


import java.util.HashMap;
import java.util.Map;

import com.ibm.actor.AbstractActor;
import com.ibm.actor.Actor;
import com.ibm.actor.DefaultActorManager;
import com.ibm.actor.DefaultMessage;
import com.ibm.actor.Message;

public class TestActor extends AbstractActor {

	private Actor to;

	public void setTestActor(Actor sendTo) {
		this.to = sendTo;
	}

	@Override
	public void activate() {
		super.activate();
	}

	@Override
	public void deactivate() {
		logger.trace("TestActor deactivate: %s", getName());
		super.deactivate();
	}

	@Override
	protected void runBody() {
		DefaultMessage m = new DefaultMessage("message->from :" + getName(), 20);
		getManager().send(m, null, this);
	}

	@Override
	protected void loopBody(Message m) {
		String subject = m.getSubject();
		int count = (Integer) m.getData();
		if (count > 0) {
			m = new DefaultMessage("message->from :" + getName(), count - 1);
			System.out.println(getName() + ":" + subject + " data:" + m.getData());
			getManager().send(m, this, to);
		}

	}

	public static void main(String[] args) {
		DefaultActorManager am = new DefaultActorManager();
		Map<String, Actor> actors = new HashMap<String, Actor>();
		try {
			Map<String, Object> options = new HashMap<String, Object>();
			options.put(DefaultActorManager.ACTOR_THREAD_COUNT, 2);
			am.initialize(options);
			TestActor a = (TestActor) am.createActor(TestActor.class, "actor0");
			actors.put(a.getName(), a);
			TestActor b = (TestActor) am.createActor(TestActor.class, "actor1");
			actors.put(b.getName(), b);
			a.setTestActor(b);
			b.setTestActor(a);
			for (String key : actors.keySet()) {
				am.startActor(actors.get(key));
			}
			Thread.sleep(10000000);
			// am.terminateAndWait();
		} catch (Exception e) {
		}
	}
}

 输出:

actor0:message->from :actor0 data:19
actor1:message->from :actor1 data:19
actor1:message->from :actor0 data:18
actor0:message->from :actor1 data:18
actor1:message->from :actor0 data:17
actor0:message->from :actor1 data:17
actor0:message->from :actor1 data:16
actor1:message->from :actor0 data:16
actor1:message->from :actor0 data:15
actor0:message->from :actor1 data:15
actor0:message->from :actor1 data:14
actor1:message->from :actor0 data:14
actor0:message->from :actor1 data:13
actor1:message->from :actor0 data:13
actor0:message->from :actor1 data:12
actor1:message->from :actor0 data:12
actor1:message->from :actor0 data:11
actor0:message->from :actor1 data:11
actor0:message->from :actor1 data:10
actor1:message->from :actor0 data:10
actor0:message->from :actor1 data:9
actor1:message->from :actor0 data:9
actor1:message->from :actor0 data:8
actor0:message->from :actor1 data:8
actor0:message->from :actor1 data:7
actor1:message->from :actor0 data:7
actor1:message->from :actor0 data:6
actor0:message->from :actor1 data:6
actor0:message->from :actor1 data:5
actor1:message->from :actor0 data:5
actor1:message->from :actor0 data:4
actor0:message->from :actor1 data:4
actor1:message->from :actor0 data:3
actor0:message->from :actor1 data:3
actor1:message->from :actor0 data:2
actor0:message->from :actor1 data:2
actor1:message->from :actor0 data:1
actor0:message->from :actor1 data:1
actor1:message->from :actor0 data:0
actor0:message->from :actor1 data:0



原文地址:https://www.cnblogs.com/secbook/p/2655152.html