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

bug fix
author shoshi
date Sun, 29 Aug 2010 12:07:03 +0900
parents
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 TestMultiThread2
{
	public static void main(String _arg[]) throws Exception
	{
		new TestMultiThread2();
	}
	
	public TestMultiThread2() 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");
		
		child1.addChild(child11);
		child1.addChild(child12);
		
		NodeAPI child21 = builder.createNode();
		child21.setTitle("21");
		
		child2.addChild(child21);
		
		Thread th2 = new EditingWorkerThread(root);
		Thread th3 = new EditingWorkerThread(root);
		
		th2.start();
		th3.start();
		
		th2.join();
		th3.join();
		
		PreOrderTreeWalkerRecursive walker = new PreOrderTreeWalkerRecursive(root);
		String result = "";
		Iterator<NodeAPI> itr = walker.iterator();
		while(itr.hasNext()){
			NodeAPI node = itr.next();
			result += (node.getTitle() + "\t");
		}
		System.out.println(result);
	}
	
	class RenderingWorkerThread extends Thread
	{
		private NodeAPI m_root;
		
		public RenderingWorkerThread(NodeAPI _node)
		{
			m_root = _node;
		}
			
		public void run()
		{
			PreOrderTreeWalkerRecursive walker = new PreOrderTreeWalkerRecursive(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);
			PreOrderTreeWalkerRecursive walker = new PreOrderTreeWalkerRecursive(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");
					}
				}
			}
			//
		}
	}
}