synchronized
$B%V%m%C%/(BRevised: 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%/%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$N $B$3$l$r%^%k%A!&%9%l%C%I$GAv$i$;$k%3%s%H%m!<%k!&%/%i%9$r
$B$3$N7k2L!"(B $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!"
$B$3$l$r2sHr$9$k0Y$K$O!"(B$BA0@a(B$B$N(B $B$3$l$G
$B7k2L$H$7$F!"(B $B=q$-9~$_%a%=%C%I$,F14|;XDj$5$l$?0Y$K!"=EJ#=q$-9~$_$,$J$/$J$j$^$7$?!#(B $B$7$+$7$J$,$i!"(B $B$3$l$i$N#2E@$r9MN8$9$k$H!"(B $B$3$N$H$-!"(B
sugai
sugai manabu
$B?{0f(B $B3X(B
$BF14|;XDj$7$J$$%^%k%A%9%l%C%I$NNc(B
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>
customers.txt
$B$O
sugai
suzuki
sato
sugai
sugai
synchronized
$B=$>~;R$K$h$jF14|;XDj$7$?%^%k%A%9%l%C%I%W%m%0%i%`(Bsynchronized
$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;
}
}
C:\Java\Thread>javac CustTest2.java
C:\Java\Thread>java CustTest2
true
true
false
true
false
C:\Java\Thread>
customers.txt
$B$O
sugai
suzuki
sato
synchronized
$B%V%m%C%/$K$h$jF14|;XDj$7$?%^%k%A%9%l%C%I%W%m%0%i%`(BCustomer
$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!#(BCustomer
$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;
}
}
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] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送