技术开发 频道

JAVA线程:两种不同创建方式全面解析

  那么还有一种方法就是使用内部类,下面是我从书本上抄写下来的一个例子:

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();
    }
}
0
相关文章