toggle menu

JAVA 정리 - Synchronized (동기화)

2012. 8. 2. 15:12 JAVA

wait()으로 대기 상태로 이동

notify()는 우선순위가 높은 스레드를 깨우고, notifyAll()은 모두 깨우지만 사실 크게 다르지 않다.

 

class Account
{
	int bal = 0;

	public synchronized void balanceChange(String name, boolean state)
	{
		if( state )
		{
			System.out.print(name + "=> 현재금액 : " + bal);
			bal += 100;
			System.out.println("\t=> 증가금액 : " + bal);
		}
		else
		{
			System.out.print(name + "=> 현재금액 : " + bal);
			bal -= 100;
			System.out.println("\t=> 감소금액 : " + bal);
		}
	}
}

class Thread1 extends Thread
{
	Account ac = null;
	boolean state = false;
	String name = null;

	@Override
	public void run()
	{
		for( int i = 0 ; i < 50 ; i++ )
		{
			ac.balanceChange(name, state);
			Thread.yield();
		}
		System.out.println(name + " : 완료!!");

	}

	Thread1(Account ac, boolean state, String name)
	{
		this.ac = ac;
		this.state = state;
		this.name = name;
	}
}

public class SyncExam
{
	public static void main(String[] args)
	{
		Account ac = new Account();

		Thread1 th1 = new Thread1(ac, true, "입금자");
		Thread1 th2 = new Thread1(ac, false, "출금자");

		th1.start();
		th2.start();

	}

}










JAVA 관련 포스팅 더보기