synchronized $B=$>~;R(B

Revised: Apr./6th/2002; Since: Mar./23rd/2002

$B%a%=%C%I$KBP$7$F!"(B synchronized $B=$>~;R$r;XDj$9$k$3$H$,$G$-$^$9!#$3$N=$>~;R$G;XDj$5$l$?%a%s%P!<$O!":GBg$G$b0l$D$N%9%l%C%I$K$7$+;YG[$5$l$^$;$s!#$"$k%9%l%C%I$,$3$N%a%s%P$K%"%/%;%9$7$F$$$k$H$-$KJL$N%9%l%C%I$,=E$M$F%"%/%;%9$7$h$&$H$9$k$H!"@h$K;H$C$F$$$?%9%l%C%I$K$h$k=hM}$,=*N;$9$k$^$GBT5!$5$;$i$l$^$9!#(B

synchronized $B=$>~$5$l$?%a%s%P!<$O!"0l$D$N%9%l%C%I$K%"%/%;%9$5$l$k$H%m%C%/$5$l$F!"%^%k%A%9%l%C%I$K$h$kF1;~%"%/%;%9$rKI$2$^$9!#$3$N$h$&$J%3!<%I$r;}$C$?%*%V%8%'%/%H$N$3$H$r%b%K%?!<$H8F$S$^$9!#(B

$B%5%s%W%k(B

$BF14|;XDj$7$J$$$?$a$KIT@09g$,5/$3$kNc(B

$B

$B$=$l$>$l$N%9%l%C%I$O!"F1$8%*%V%8%'%/%H$N%G!<%?$r

$BIT@09g$r5/$3$90Y$K(B Thread.sleep() $B$r;H$C$F$$$^$9$,!"DL>o$O$=$l$@$1$N;~4V$,3]$+$k=hM}$,B8:_$9$k$3$H$K$J$j$^$9!#(B

// $B6&M-$9$k%G!<%?$rJ];}$9$k%/%i%9(B
class Share {
	private int x = 0;

	public void addX() {
		int a = x;

		// $B#2IC4V%9%j!<%W(B
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			System.out.println("Share: " + e);
		}

		x = a + 1;
		System.out.println(a);
	}

	public int getX() {
		return x;
	}
}

// $B%^%k%A%9%l%C%I$Gimplements Runnable {
	// $B6&M-%*%V%8%'%/%H(B
	Share var;

	// $B%3%s%9%H%i%/%?(B
	Sync(Share obj) {
		var = obj;
	}

	public void run() {
		var.addX();
	}
}

// $B%3%s%H%m!<%k%/%i%9(B
class SyncTest {
	public static void main(String[] args) {
		// $B6&M-%*%V%8%'%/%H(B
		Share obj = new Share();
		System.out.println("count: " + obj.getX());

		// $B%9%l%C%I$NG[Ns$N@k8@(B
		Thread[] thres = new Thread[5];

		// $B#5$D$N%9%l%C%I$N:n@.(B
		for (int i=0; i<5; i++) {
			// Runnable $B%*%V%8%'%/%H$r%9%l%C%I$K0Q>y(B
			thres[i] = new Thread(new Sync(obj));
			// $B%9%l%C%I$N3+;O(B
			thres[i].start();
		}

		// $BA4$F$N%9%l%C%I$,=*N;$9$k$^$GBT5!(B
		for (int i=0; i<5; i++) {
			try {
				thres[i].join();
			} catch (InterruptedException e) {
				System.out.println("main(): " + e);
			}
		}

		System.out.println("count: " + obj.getX());
	}
}

$B$3$N%5%s%W%k$G$O!"8^$D$N%9%l%C%I$,!"6&M-%*%V%8%'%/%H$N%G!<%?$re

$B?^!'!!F14|;XDj$7$J$$IT@09g$NNc(B
C:\Java\Thread>javac SyncTest.java

C:\Java\Thread>java SyncTest
count: 0
0
0
0
0
0
count: 1

$BF14|;XDj$7$?Nc(B

$B

// $B6&M-$9$k%G!<%?$rJ];}$9$k%/%i%9(B
class Share {
	private int x = 0;

	// $BF14|;XDj$7$?%a%=%C%I(B
	public synchronized void addX() {
		int a = x;
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			System.out.println("Share: " + e);
		}
		x = a + 1;
		System.out.println(a);
	}

	// $BF14|;XDj$7$?%a%=%C%I(B
	public synchronized int getX() {
		return x;
	}
}

// $B%^%k%A%9%l%C%I$G

$B$3$NNc$G$O!"(B addX() $B$K(B synchronized $B=$>~;R$r$D$1$F$$$k$N$G!"0l$D$N%9%l%C%I$,$N%9%l%C%I$O%"%/%;%9$G$-$:!"%V%m%C%/$5$l$FuBV$K$J$j$^$9!#$3$N$3$H$K$h$C$F!"A0$N%5%s%W%k$G8+$?$h$&$JIT@09g$,2r7h$5$l$F$$$^$9!#(B

C:\Java\Thread>javac SyncTest.java

C:\Java\Thread>java SyncTest
count: 0
0
1
2
3
4
count: 5


Copyright © 2002 SUGAI, Manabu. All Rights Reserved.
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送