線程對象也是從一個(線程)類而構建的,線程類作為一個類也可以擁有自己的私有成員。這個成員 為此線程對象私有,有時候使用線程私有變量,會巧妙避免一些並發安全的問題,提高程序的靈活性和編 碼的復雜度。
下面舉例來說吧,統計一個線程類創建過多少個線程,並為每個線程進行編號。
package com.lavasoft.test;
/**
* 為線程添加編號,並確所創建過線程的數目
*
* @author leizhimin 2010-1-4 14:15:31
*/
public class ThreadVarTest {
public static void main(String[] args) {
Thread t1 = new MyThread();
Thread t2 = new MyThread();
Thread t3 = new MyThread();
Thread t4 = new MyThread();
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class MyThread extends Thread {
private static int sn = 0; //線程數
private int x = 0; //線程編號
MyThread() {
x = sn++;
}
@Override
public void run() {
Thread t = Thread.currentThread();
System.out.println(t.getName() + "\t" + x);
}
}
運行結果:
Thread-0 0
Thread-1 1
Thread-2 2
Thread-3 3
Process finished with exit code 0
這個程序是很多公司面試題,這是一種求解方式,應該是最簡單的求解方式。還有用ThreadLocal實現 的版本,還有其他的,都沒有這個代碼簡潔。
出處:http://lavasoft.blog.51cto.com/62575/258380