blob: 747d01f8750435a2da26dc8641ab2cef8d838323 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.wst.sse.core.tests.threading;
import java.util.Random;
/**
* See http://java.sun.com/developer/JDCTechTips/2003/tt1208.html#2 for
* informative article.
*/
public class ThreadLocalExample {
// Create thread local class
// Initial value is a random number from 0-999
private static class MyThreadLocal extends ThreadLocal {
private Random innerRandom = new Random();
protected Object initialValue() {
return new Integer(innerRandom.nextInt(1000));
}
}
// Create class variable
static volatile int counter = 0;
// Define/create thread local variable
static ThreadLocal threadLocal = new MyThreadLocal();
// For random number generation
// static Random random = new Random();
// Displays thread local variable, counter,
// and thread name
static void displayValues() {
System.out.println(threadLocal.get() + "\t" + counter + "\t" + Thread.currentThread().getName());
}
public static void main(String args[]) {
// Each thread increments counter
// Displays variable info
// And sleeps for the random amount of time
// Before displaying info again
Runnable runner = new Runnable() {
public void run() {
synchronized (ThreadLocalExample.class) {
counter++;
}
displayValues();
try {
Thread.sleep(((Integer) threadLocal.get()).intValue());
displayValues();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
};
// Another instance of class created
// and values displayed
displayValues();
// Here's where the other threads
// are actually created
for (int i = 0; i < 5; i++) {
Thread t = new Thread(runner);
t.start();
}
}
/**
*
*/
public ThreadLocalExample() {
super();
}
}