synchronized $B%V%m%C%/(B

Revised: Sep./01st/2004; since: Mar./23rd/2002

$BA0@a$G(B synchronized $B=$>~;R$r>R2p$7$^$7$?!#$3$l$O%a%s%P!<$r%m%C%/$7$FB?=E%"%/%;%9$rKI$0$b$N$G$9!#F1MM$NH/A[$G!"@)8f$NFCDj$NItJ,$r%V%m%C%/2=$7$F!"$=$NItJ,$@$1%m%C%/$r3]$1$k$3$H$b=PMh$^$9!#$3$N$h$&$J%V%m%C%/$r(B synchronized $B%V%m%C%/$H8F$S$^$9!#(B

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

$B%7%s%0%k%9%l%C%I$NNc(B

$B%/%i%9(B Customer $B$N%a%=%C%I(B addCust() $B$O!"0z?t$Gname $B$,!"8\5RL>Jm(B CustList $B7?%*%V%8%'%/%H(B list $B$KB8:_$9$k$+$I$&$+D4$Y$F(B list.isCust(name) $B!"B8:_$9$l$P(B true $B$rJV$7!"B8:_$7$J$1$l$PL>Jm$KDI2C(B list.addCust(name) $B$7$F(B false $B$rJV$7$^$9!#(B

import java.io.*;

// $B8\5RL>Jm%*%V%8%'%/%H(B
class CustList {
	// $B8\5RL>Jm%U%!%$%k$NCj>]%Q%9L>%*%V%8%'%/%H(B
	private File list = new File("customers.txt");

	// $B8\5RL>Jm$KL>A0$,B8:_$9$k$+$I$&$+%A%'%C%/(B
	public boolean isCust(String name) {
		try {
			// $BF~NO%9%H%j!<%`$N%P%C%U%!%j%s%0(B
			BufferedReader br = new BufferedReader(new FileReader(list));

			// $B0l9TFI$_9~$s$G(B str $B$KBeF~$7!"(B
			// $B%U%!%$%k=*N;$^$G7+$jJV$9!#(B
			String str = "";
			while ((str = br.readLine()) != null) {
				if (str.indexOf(name) != -1) {
					// $B=PNO%9%H%j!<%`$N%/%m!<%:(B
					br.close();
					// $BL>A0$,8+IU$+$l$P(B true $B$rJV$9(B
					return true;
				}
			}
			// $B=PNO%9%H%j!<%`$N%/%m!<%:(B
			br.close();
		} catch (Exception e) {
			System.out.println(e);
		}
		// $B%U%!%$%k=*N;$^$GL>A0$,8+IU$+$i$J$+$C$?>l9g$K!"(B
		// false $B$rJV$9!#(B
		return false;
	}

	// $B8\5RL>Jm$X$N=q$-=P$7(B
	public void addCust(String name) {
		try {
			// $B=PNO%9%H%j!<%`$N%P%C%U%!%j%s%0(B
			BufferedWriter bw = new BufferedWriter(new FileWriter("customers.txt", true));
			bw.write(name);
			bw.newLine();
			bw.flush();
			bw.close();
		} catch (Exception e) {
			System.out.println(e);
		}
	}
}


class Customer {
	// $B8\5RL>Jm%U%!%$%k$NCj>]%Q%9L>%*%V%8%'%/%H(B
	CustList list;

	// $B%3%s%9%H%i%/%?(B
	Customer(CustList obj) {
		list = obj;
	}

	boolean addCust(String name) {
		if (list.isCust(name)) {
			return false;
		} else {
			// $B:n0YE*$KL7=b$r5/$3$90Y$N(B sleep
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				System.out.println(e);
			}
			list.addCust(name);
		}
		return true;
	}
}

addCust() $B$G$O!"(Blist.isCust(name) $B$,(B false $B$K$J$k$H$-!J8\5RL>$,8+$D$+$i$J$+$C$?$H$-!K!":GDc$G$b(B2$BIC4VDd;_$9$k$h$&$K(B sleep() $B$5$;$F$$$^$9!#(B2$BIC$rD6$($k$H!"(BCPU$B$N%G%#%9%Q%C%A$NBT5!>uBV$K$J$j$^$9!#%7%s%0%k%9%l%C%I$G$OC1$KDd;_$9$k$@$1$G$9$,!"%^%k%A%9%l%C%I$N>l9g!"$3$3$GDd;_$7$F$$$k4V$KB>$N%9%l%C%I$,DI2C$7$F$7$^$&$J$I$NIT@09g$,H/@8$9$k%?%$%_%s%0$r9-$2$k$3$H$K$J$j$^$9!#(B

$B$3$N%/%i%9$r;H$&%3%s%H%m!<%k!&%/%i%9$O

CustTest.java

class CustTest {
	public static void main(String[] args) {
		String name="";
		for (int i = 0; i < args.length; i++) {
			name = name + " " + args[i];
		}
		CustList list = new CustList();
		Customer cust = new Customer(list);
		System.out.println(cust.addCust(name));
	}
}

$B%3%^%s%I%i%$%s!'(B

C:\Java\Thread>javac CustTest.java

C:\Java\Thread>java CustTest sugai
true

C:\Java\Thread>java CustTest sugai manabu
true

C:\Java\Thread>java CustTest $B?{0f(B $B3X(B
true

C:\Java\Thread>java CustTest sugai
false

C:\Java\Thread>

$B>e$Ncustomers.txt $B$O

 sugai
 sugai manabu
 $B?{0f(B $B3X(B

$BF14|;XDj$7$J$$%^%k%A%9%l%C%I$NNc(B

$B$3$l$r%^%k%A!&%9%l%C%I$GAv$i$;$k%3%s%H%m!<%k!&%/%i%9$r

CustTest2.java

class CustName implements Runnable {
	Customer cust;
	String name;

	CustName(Customer obj, String str) {
		cust = obj;
		name = str;
	}

	public void run() {
		System.out.println(cust.addCust(name));
	}
}

class CustTest2 {
	public static void main(String[] args) {
		CustList list = new CustList();
		Customer customer = new Customer(list);
		CustName[] cust = new CustName[5];

		cust[0] = new CustName(customer, "sugai");
		cust[1] = new CustName(customer, "suzuki");
		cust[2] = new CustName(customer, "sugai");
		cust[3] = new CustName(customer, "sato");
		cust[4] = new CustName(customer, "sugai");

		// $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(cust[i]);
			// $B%9%l%C%I$N3+;O(B
			thres[i].start();
		}
	}
}
C:\Java\Thread>javac CustTest2.java

C:\Java\Thread>java CustTest2
true
true
true
true
true

C:\Java\Thread>

$B$3$N7k2L!"(B customers.txt $B$O

sugai
suzuki
sato
sugai
sugai

$BF1$8L>A0$N%(%s%H%j!<$,J#?t:n@.$5$l$F$$$^$9!#$3$NL7=b$O!"0l$D$N%9%l%C%I$,=q$-9~$`A0$K!"

synchronized $B=$>~;R$K$h$jF14|;XDj$7$?%^%k%A%9%l%C%I%W%m%0%i%`(B

$B$3$l$r2sHr$9$k0Y$K$O!"(B$BA0@a(B$B$N(B synchronized $B=$>~;R$G$O

class Customer {
	CustList list;

	Customer(CustList obj) {
		list = obj;
	}

	synchronized boolean addCust(String name) {
		if (list.isCust(name)) {
			return false;
		} else {

			// $B:n0YE*$KL7=b$r5/$3$90Y$N(B sleep
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				System.out.println(e);
			}

			list.addCust(name);
		}
		return true;
	}
}

$B$3$l$G

C:\Java\Thread>javac CustTest2.java

C:\Java\Thread>java CustTest2
true
true
false
true
false

C:\Java\Thread>

$B7k2L$H$7$F!"(B customers.txt $B$O

sugai
suzuki
sato

$B=q$-9~$_%a%=%C%I$,F14|;XDj$5$l$?0Y$K!"=EJ#=q$-9~$_$,$J$/$J$j$^$7$?!#(B

synchronized $B%V%m%C%/$K$h$jF14|;XDj$7$?%^%k%A%9%l%C%I%W%m%0%i%`(B

$B$7$+$7$J$,$i!"(B Customer $B%/%i%9$GJ]8n$7$?$$$N$O!"(B addCust() $B%a%=%C%IA4$F$G$O$J$/!"$=$N0lIt$N%3!<%I$G$"$k$N$b;vCustomer $B%/%i%97?%*%V%8%'%/%H$G$O$J$/!"$=$3$GMxMQ$9$k(B CustList $B%/%i%97?%*%V%8%'%/%H(B list $B$NJ}$G$9!#(B

$B$3$l$i$N#2E@$r9MN8$9$k$H!"(B Customer $B%/%i%9$O

class Customer {
	CustList list;

	Customer(CustList obj) {
		list = obj;
	}

	boolean addCust(String name) {
		synchronized(list) {
			if (list.isCust(name)) {
				return false;
			} else {

				// $B:n0YE*$KL7=b$r5/$3$90Y$N(B sleep
				try {
					Thread.sleep(2000);
				} catch (InterruptedException e) {
					System.out.println(e);
				}

				list.addCust(name);
			}
		}
		return true;
	}
}

$B$3$N$H$-!"(B customer.txt $B$rGr;f$K$7$?>uBV$G$N

C:\Java\Thread>javac CustTest2.java

C:\Java\Thread>java CustTest2
true
false
true
false
true

C:\Java\Thread>
sugai
suzuki
sato


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