那么还有一种方法就是使用内部类,下面是我从书本上抄写下来的一个例子:
package cn.com.sxia;import java.util.concurrent.CountDownLatch;class InnerThread1{
private int countDown = 5;
private Inner inner;
private class Inner extends Thread{
Inner(String name) {
super(name);
start();
}
public void run(){
while(true){
System.out.println(this);
if (--countDown == 0)
return;
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public String toString(){
return getName() + ": " + countDown;
}
}
public InnerThread1(String name) {
inner = new Inner(name);
}
}
class InnerThread2{
private int countDown = 5;
private Thread t;
public InnerThread2(String name) {
t = new Thread(name){
public void run(){
while(true)
{
System.out.println(this);
if (--countDown == 0)
return;
try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public String toString(){
return getName() + ": " + countDown;
}
};
t.start();
}
}
class InnerRunnable1{
private int countDown = 5;
private Inner inner;
private class Inner implements Runnable{
Thread t;
public Inner(String name) {
t = new Thread(this,name);
t.start();
}
@Override
public void run() {
while(true){
System.out.println(this);
if (--countDown == 0)
return;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public String toString(){
return t.getName() + ": " + countDown;
}
}
public InnerRunnable1(String name) {
inner = new Inner(name);
}
}
class InnerRunnable2{
private int countDown = 5;
private Thread t;
public InnerRunnable2(String name)
{
t = new Thread(new Runnable() {
@Override
public void run() {
while(true){
System.out.println(this);
if (--countDown == 0)
return;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
public String toString(){
return Thread.currentThread().getName() + ": " + countDown;
}
},name);
t.start();
}
}
class ThreadMethod{
private int countDown = 5;
private Thread t;
private String name;
public ThreadMethod(String name){
this.name = name;
}
public void runThread(){
if (t == null){
t = new Thread(name){
public void run(){
while(true)
{
System.out.println(this);
if (--countDown == 0)
return;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} public String toString(){
return getName() + ": " + countDown;
}
}; t.start();
}
}
}public class ThreadVariations {
public static void main(String[] args) {
new InnerThread1("InnerThread1");
new InnerThread2("InnerThread2");
new InnerRunnable1("InnerRunnable1");
new InnerRunnable2("InnerRunnable2");
new ThreadMethod("ThreadMethod").runThread();
}
}
private int countDown = 5;
private Inner inner;
private class Inner extends Thread{
Inner(String name) {
super(name);
start();
}
public void run(){
while(true){
System.out.println(this);
if (--countDown == 0)
return;
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public String toString(){
return getName() + ": " + countDown;
}
}
public InnerThread1(String name) {
inner = new Inner(name);
}
}
class InnerThread2{
private int countDown = 5;
private Thread t;
public InnerThread2(String name) {
t = new Thread(name){
public void run(){
while(true)
{
System.out.println(this);
if (--countDown == 0)
return;
try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public String toString(){
return getName() + ": " + countDown;
}
};
t.start();
}
}
class InnerRunnable1{
private int countDown = 5;
private Inner inner;
private class Inner implements Runnable{
Thread t;
public Inner(String name) {
t = new Thread(this,name);
t.start();
}
@Override
public void run() {
while(true){
System.out.println(this);
if (--countDown == 0)
return;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public String toString(){
return t.getName() + ": " + countDown;
}
}
public InnerRunnable1(String name) {
inner = new Inner(name);
}
}
class InnerRunnable2{
private int countDown = 5;
private Thread t;
public InnerRunnable2(String name)
{
t = new Thread(new Runnable() {
@Override
public void run() {
while(true){
System.out.println(this);
if (--countDown == 0)
return;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
public String toString(){
return Thread.currentThread().getName() + ": " + countDown;
}
},name);
t.start();
}
}
class ThreadMethod{
private int countDown = 5;
private Thread t;
private String name;
public ThreadMethod(String name){
this.name = name;
}
public void runThread(){
if (t == null){
t = new Thread(name){
public void run(){
while(true)
{
System.out.println(this);
if (--countDown == 0)
return;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} public String toString(){
return getName() + ": " + countDown;
}
}; t.start();
}
}
}public class ThreadVariations {
public static void main(String[] args) {
new InnerThread1("InnerThread1");
new InnerThread2("InnerThread2");
new InnerRunnable1("InnerRunnable1");
new InnerRunnable2("InnerRunnable2");
new ThreadMethod("ThreadMethod").runThread();
}
}