view src/treecms/proto/test/TestMultiThread1.java @ 13:3bccd745f2e2

bug fix
author shoshi
date Sun, 29 Aug 2010 12:07:03 +0900
parents c8e31aaac297
children
line wrap: on
line source

package treecms.proto.test;

import java.util.Iterator;
import java.util.Random;

import treecms.proto.api.NodeAPI;
import treecms.proto.api.NodeAPITreeBuilder;
import treecms.proto.edit.type1.*;
import treecms.proto.simple.SimpleNodeAPITreeBuilder;

public class TestMultiThread1
{
	public static void main(String _arg[]) throws Exception
	{
		new TestMultiThread1();
	}
	
	public TestMultiThread1() throws Exception
	{
		NodeAPITreeBuilder builder = new SimpleNodeAPITreeBuilder();
		NodeAPI root = builder.getContents();
		root.setTitle("t");
		
		NodeAPI child1 = builder.createNode();
		child1.setTitle("1");
		NodeAPI child2 = builder.createNode();
		child2.setTitle("2");
		
		root.addChild(child1);
		root.addChild(child2);
		
		NodeAPI child11 = builder.createNode(); 
		child11.setTitle("11");
		NodeAPI child12 = builder.createNode();
		child12.setTitle("12");
		NodeAPI child13 = builder.createNode();
		child13.setTitle("13");
		
		child1.addChild(child11);
		child1.addChild(child12);
		child1.addChild(child13);
		
		NodeAPI child21 = builder.createNode();
		child21.setTitle("21");
		
		child2.addChild(child21);
		
		NodeAPI child211 = builder.createNode();
		child211.setTitle("211");
		NodeAPI child212 = builder.createNode();
		child212.setTitle("212");
		
		child21.addChild(child211);
		child21.addChild(child212);
		
		Thread th1 = new RenderingWorkerThread(root);
		Thread th2 = new EditingWorkerThread(root);
		Thread th3 = new EditingWorkerThread(root);
		
		th1.start();
		th2.start();
		th3.start();
		
		th1.join();
		th2.join();
		th3.join();
	}
	
	class RenderingWorkerThread extends Thread
	{
		private NodeAPI m_root;
		
		public RenderingWorkerThread(NodeAPI _node)
		{
			m_root = _node;
		}
			
		public void run()
		{
			PreOrderTreeWalker walker = new PreOrderTreeWalker(m_root);
			for(int i = 0;i < 3;i ++){
				String result = "";
				Iterator<NodeAPI> itr = walker.iterator();
				while(itr.hasNext()){
					NodeAPI node = itr.next();
					result += (node.getTitle() + " ");
				}
				System.out.println(result);
			}
		}
	}
	
	class EditingWorkerThread extends Thread
	{
		private NodeAPI m_root;
		
		public EditingWorkerThread(NodeAPI _node)
		{
			m_root = _node;
		}
		public void run()
		{
			NodeAPITreeBuilder builder = new EditableNodeAPITreeBuilder(m_root);
			PreOrderTreeWalker walker = new PreOrderTreeWalker(builder.getContents());
			for(int i = 0;i < 3;i ++){
				Iterator<NodeAPI> itr = walker.iterator();
				while(itr.hasNext()){
					NodeAPI node = itr.next();
					if((new Random()).nextBoolean()){
						node.setTitle("edit");
					}
				}
			}
			//
		}
	}
}