From owner-java@jp.FreeBSD.org Wed Aug  7 00:35:39 2002
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) id g76FZd565913;
	Wed, 7 Aug 2002 00:35:39 +0900 (JST)
	(envelope-from owner-java@jp.FreeBSD.org)
Received: from cs20.catv.ne.jp (cs20.catv.ne.jp [202.232.171.40])
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) with ESMTP/inet id g76FZcn65901
	for <java@jp.FreeBSD.org>; Wed, 7 Aug 2002 00:35:38 +0900 (JST)
	(envelope-from yamasa@ec.catv.ne.jp)
Received: from localhost by cs20.catv.ne.jp (8.9.1/3.7W)
	id AAA08646; Wed, 7 Aug 2002 00:35:36 +0900 (JST)
Date: Wed, 07 Aug 2002 00:35:37 +0900 (JST)
Message-Id: <20020807.003537.74758240.yamasa@ec.catv.ne.jp>
To: java@jp.FreeBSD.org
From: OISHI Masakuni <yamasa@ec.catv.ne.jp>
In-Reply-To: <20020803230426.2810d3e5.daichi@jp.freebsd.org>
References: <20020727.052052.59459742.yamasa@ec.catv.ne.jp>
	<20020803215811.6e68913d.daichi@ongs.co.jp>
	<20020803230426.2810d3e5.daichi@jp.freebsd.org>
X-Mailer: Mew version 2.1 on Emacs 21.2 / Mule 5.0 (SAKAKI)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Reply-To: java@jp.FreeBSD.org
Precedence: list
X-Sequence: java 154
Subject: [java 154] Re: Java Memory Model
Errors-To: owner-java@jp.FreeBSD.org
Sender: owner-java@jp.FreeBSD.org
X-Originator: yamasa@ec.catv.ne.jp
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+020727

$BBg@P$G$9!#(B

From: daichi <daichi@jp.FreeBSD.org>
Subject: [java 153] Re: Java Memory Model
Date: Sat, 3 Aug 2002 23:04:26 +0900

> $BBgCO$G$9!#(B
> 
> > ThreadLocal$B$NF0:n$rM}2r$7$h$&$H%=!<%9%3!<%I$rFI$s$G$$$F%M%9%H(B
> > $B$7$?%/%i%9$K(Bstatic$B;XDj$,$"$k$3$H$rCN$j$^$7$?!#(B

ThreadLocal$B$NF0:n$rM}2r$9$k$@$1$J$i!"(Bjdk1.4$B$N%=!<%9$O(B
$B8+$J$$$[$&$,$$$$$G$9!#(B
jdk1.4$B$N(BThreadLocal$B$O%Q%U%)!<%^%s%98~>e$N$?$a$@$1$K(B
$B%+%9%?%`HG$N(BWeakHashMap($B$b$I$-(B)$B$rFH<+$K<BAu$7$F$$$k$N$G(B
$BHs>o$KFI$_$E$i$$$+$i$G$9!#(B

$B%Q%U%)!<%^%s%9$rL5;k$9$l$P!"(Bjdk1.4$B$N(BThreadLocal$B$N%3!<%I$O(B
$B0J2<$N$b$N$H$[$\F1Ey$G$9!#(B
---
package java.lang;

public class Thread implements Runnable {
    ...
    Map threadLocals = new WeakHashMap();
    ...
}

public class ThreadLocal {
    protected Object initialValue() {
        return null;
    }
    public Object get() {
        Map map = Thread.currentThread().threadLocals;
        if (map.containsKey(this)) {
	    return map.get(this);
	} else {
	    Object value = initialValue();
	    map.put(this, value);
	    return value;
	}
    }
    public void set(Object value) {
        Map map = Thread.currentThread().threadLocals;
	map.put(this, value);
    }
}
---

http://www-6.ibm.com/jp/developerworks/java/020222/j_j-threads3.html
$B$N5-;v$d!"(Bjdk1.2, jdk1.3$B$N%3!<%I$rFI$s$G$_$k$N$bNI$$$H;W$$$^$9!#(B

> > ThreadLocal$B%/%i%9$K$*$$$F(BTreadLocalMap$B%/%i%9$r(Bstatic class$B$J(B
> > $B;XDj$GJ];}$7$F$$$k$N$G$9$,!"$3$N(Bstatic$B;XDj$O;XDj$,$J$$>l9g(B
> > $B$HHf$Y$F$I$s$J0c$$$,$"$k$b$N$J$N$G$7$g$&$+!#(B
> 
> static$B;XDj$,$J$$>l9g$H$N0c$$$O!"$=$l$rFbJq$7$F$$$k%/%i%90J30(B
> $B$N%/%i%9$+$i$=$N%M%9%H7?$N%/%i%9$r@8@.$9$k$H$-$K!"(Bstatic$B;XDj(B
> $B$,$"$k$H(BThreadLocal$B$N<BBN$,$J$/$H$b(Bnew ThreadLocal.TreadLocalMap()$B$G(B
> TreadLocalMap$B$r@8@.$9$k$3$H$,$G$-!"(Bstatic$B;XDj$,$J$$$H(BthreadLocal
> $B$H$$$C$?<BBN$rDL$7$F(BthreadLocal.new TreadLocalMap()$B$N$h$&$K$7(B
> $B$+@8@.$G$-$J$$!"$H$$$&$3$H$G$9$M!#(B
> 
> # $B$3$3$G(BThreadLocalMap$B$H(BEntry$B$r(Bstatic$B$K$7$F$k0UL#$O$"$k$N$+$J!#(B

$B%M%9%H$7$?%/%i%9$O!"(Bstatic#$B$"$j(B#$B$NJ}$,4pK\$@$H$$$C$?$[$&$,(B
$B$h$$$+$b$7$l$^$;$s!#(B

static$B$"$j$N%/%i%9$O!"(Bprivate$B$J$I$N%"%/%;%9@)8B$r2sHr$G$-$k(B
$B$H$$$&E@$r=|$$$F!"IaDL$N%/%i%9$H$[$H$s$I0c$$$,$"$j$^$;$s!#(B
$B0lJ}!"(Bstatic$B$J$7$N%/%i%9$O!"$=$l$r(Bnew$B$7$?(BOuterClass$B$N(B
$B%$%s%9%?%s%9$X$N0EL[$N;2>H$r$b$D$H$$$&E@$,0c$C$F$$$^$9!#(B
# $B$D$^$j!"(BOuterClass$B$H(BInnerClass$B$O>o$K(B1$BBPB?$N4X78$K$J$j$^$9!#(B

ThreadLocalMap$B$N%$%s%9%?%s%9$O3F(BThread$B%$%s%9%?%s%9Kh$K(B
$BMQ0U$5$l!"(BThreadLocal$B$N%$%s%9%?%s%9$O(BThreadLocalMap$B$N(B
$BC1$J$k%-!<$G$9!#(B
# $B%$%s%9%?%s%9$N4X78$G$$$&$H!"(B
# Thread : ThreadLocalMap : ThreadLocal = 1 : 1 : $BB?(B
# $B$G$9!#(B
$B$G$9$+$i(BThreadLocalMap$B$K$O(Bstatic$B$,;XDj$5$l$F$$$k$N$G$9!#(B

---
$BBg@P>-K.(B
yamasa@ec.catv.ne.jp
