通过构造器启动线程的实现方式及其缺点记录。
说明:在构造器中启动线程会很有问题,因为另一个任务可能会在构造器结束之前开始执行,导致该任务会访问到处于不稳定状态的对象。这也是优选Executor而不是显示创建Thread对象的原因。
如下俩种实现方式(来自Thinking in Java 的范例),这里有个疑问:是谁调用了toString 方法??从而输出相应的内容??求解。
1.
public class SimpleThread extends Thread{
	private int countDown = 5;
	private static int threadCount = 0;
	
	public SimpleThread(){
		super(Integer.toString(threadCount));
		start();
	}
	
	public String toString(){
		return "#"+getName()+"("+countDown+")";
	}
	
	public void run(){
		while(true){
			System.out.println(this);
			if(--countDown == 0){
				return;
			}
		}
	}
	public static void main(String[] args) {
		for(int i=0;i<5;i++){
			new SimpleThread();
		}
	}
}
2.
package zipDemo;
public class SelfManaged implements Runnable{
	
	private int coutdown = 5;
	//当写成这样的时候  private Thread t = new Thread(); 当前线程不会在控制台输出。
	private Thread t = new Thread(this);
	
	public SelfManaged() {
		t.start();
	}
	
	public String toString(){
		return Thread.currentThread().getName() + "("+coutdown+")";
	}
	@Override
	public void run() {
		while(true){
			System.out.println(this);
			if(--coutdown == 0){
				return;
			}
		}
	}
	public static void main(String[] args){
		for(int i=0;i<5;i++){
			new SelfManaged();
		}
	}
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号