マルチスレッドはチケット販売プログラムをシミュレートし、各ウィンドウの販売数を統計する.


import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

class Ticket implements Runnable
{
	private  int tick = 1000;
	//           
	Map<String,Integer> map = new HashMap<String, Integer>();
	Object obj = new Object();
	
	public void run()
	{
		boolean flag = true;
		while(flag)
		{
			synchronized(obj)
			{
				if(tick>0)
				{
					String name = Thread.currentThread().getName();
					//null        ,     1,               1
					int currentCount = map.get(name)==null?1:map.get(name)+1;
					//            
					map.put(name, currentCount);
//					System.out.println(name+"....sale : "+ tick);
					tick--;
				}else{
					flag = false;
				}
			}
		}

	}
}


public class  ThreadTest
{
	public static void main(String[] args) throws IOException, InterruptedException 
	{

		Ticket t = new Ticket();

		Thread t1 = new Thread(t);
		Thread t2 = new Thread(t);
		Thread t3 = new Thread(t);
		Thread t4 = new Thread(t);
		t1.start();
		t2.start();
		t3.start();
		t4.start();
		//          
		t1.join();
		t2.join();
		t3.join();
		t4.join();
		//          
		for(String name:t.map.keySet()){
			System.out.println(name+"--"+t.map.get(name));
		}
	}
}
Thread-3--339
Thread-1--340
Thread-2--242
Thread-0--79