aboutsummaryrefslogtreecommitdiff
path: root/libjava/testsuite/libjava.lang/TLtest.java
diff options
context:
space:
mode:
authorAlexandre Petit-Bianco <apbianco@gcc.gnu.org>2001-07-10 17:47:37 -0700
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>2001-07-10 17:47:37 -0700
commitaac560ac261e7a2fde599c6b162f99acd3348fe7 (patch)
tree7e25cf9cc0816f594312d12433b210413d1349e9 /libjava/testsuite/libjava.lang/TLtest.java
parentdd7716320a0a6f287c967414534307e47468223d (diff)
downloadgcc-aac560ac261e7a2fde599c6b162f99acd3348fe7.zip
gcc-aac560ac261e7a2fde599c6b162f99acd3348fe7.tar.gz
gcc-aac560ac261e7a2fde599c6b162f99acd3348fe7.tar.bz2
Makefile.am: Added `java/lang/ThreadLocal.java'.
libjava: 2001-07-10 Alexandre Petit-Bianco <apbianco@redhat.com> * Makefile.am: Added `java/lang/ThreadLocal.java'. * Makefile.in: Regenerate. * java/lang/ThreadLocal.java: Initial import. libjava/testsuite: 2001-07-10 Alexandre Petit-Bianco <apbianco@readhat.com> * libjava.lang/TLtest.java: New file. * libjava.lang/TLtest.out: New file. (http://gcc.gnu.org/ml/java-patches/2001-q3/msg00042.html ) From-SVN: r43915
Diffstat (limited to 'libjava/testsuite/libjava.lang/TLtest.java')
-rw-r--r--libjava/testsuite/libjava.lang/TLtest.java60
1 files changed, 60 insertions, 0 deletions
diff --git a/libjava/testsuite/libjava.lang/TLtest.java b/libjava/testsuite/libjava.lang/TLtest.java
new file mode 100644
index 0000000..b7f4115
--- /dev/null
+++ b/libjava/testsuite/libjava.lang/TLtest.java
@@ -0,0 +1,60 @@
+class TLtest extends Thread {
+
+ public static void main (String [] args) {
+ Data d = new Data ();
+ new ThreadTest (d, "A").start ();
+ new ThreadTest (d, "B").start ();
+ }
+}
+
+class Data {
+
+ private static ThreadLocal owner = new ThreadLocal () {
+ public Object initialValue () { return ("0"); }
+ };
+ /* A thread will call `set' to set a value it wants an instance
+ of Data to associate with it and only it. */
+ synchronized public void set (String v){owner.set (v);}
+ /* A thread will call `get' to get a value it wants an instance
+ of Data to associate with it and only it. */
+ synchronized public String get (){return (String)owner.get();}
+}
+
+class ThreadTest extends Thread {
+
+ public Data d;
+
+ ThreadTest (Data d, String name) {
+ super (name);
+ this.d = d;
+ }
+
+ public void run () {
+
+ int value = 0;
+ int ref = 0;
+
+ for (int i = 0; i < 20; i++) {
+
+ int rand = (int)(Math.random ()*20);
+
+ /* Read `value', ref is kept for comparison */
+ value = Integer.parseInt (d.get());
+
+ /* change `value' and ref by a random number, store `value'. */
+ value += rand; ref += rand;
+ d.set (Integer.toString (value));
+
+ try {
+ sleep((int)(Math.random() * 500));
+ } catch (InterruptedException e) {}
+ }
+
+ /* If a thread didn't have private value to attach to the
+ instance of Data, results wouldn't be the same */
+ if (ref == value)
+ System.out.println ("test OK.");
+ else
+ System.out.println ("test failed.");
+ }
+}