关闭

线程的两种创建方式

140人阅读 评论(0) 收藏 举报
分类:
继承Thread类:
/** 
 * 方法一: 
 *  继承Thread类创建线程 
 * @author LiMin 
 * 
 */  
public class CreateThread extends Thread {  
    private String name;  
    public CreateThread(){  
          
    }  
    public CreateThread(String name){  
        /*this.name=name;*/  
        //调用父类的给线程命名的方法  
        super(name);  
          
    }  
    public void run(){  
        for(int x =0;x<60;x++){  
            /*System.out.println(this.name+ " run -----"+ x);*/  
            /*System.out.println(this.getName()+ " run -----"+ x);*/  
            //使用Thread的静态方法获取线程名称Thread.currentThread().getName()是标准通用方式   
            /*System.out.println(Thread.currentThread().getName()+ " run -----"+ x);*/  
            System.out.println((Thread.currentThread()==this)+"....."+this.getName()+ " run -----"+ x);  
        }  
      
    }  
}  

调用:

public class ThreadTest {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
      
        CreateThread t1 = new CreateThread("one----");  
        CreateThread t2= new CreateThread("two+++++");  
          
        t1.start();  
        t2.start();  
          
          
        for(int x =0;x<60;x++){  
            System.out.println("main-----"+ x);  
        }  
    }  
  
}  


实现Runnable接口:

public class Ticket2 implements Runnable{ //extends Thread{   
      
  
    //如果是静态的话,所有的线程会共享这100张票  
    /*private  static int  ticket =100;*/  
  
    //如果不是静态的话,每一个线程对象都会创建这个ticket对象,也即每个线程拥有100张票卖。  
    //这时候,如果还是采用继承Thread类的方法就不行了,需要使用实现Runnable接口创建线程  
    private  int  ticket =1000;  
      
      
    Object obj= new Object();     
    public void run() {  
          
        //在这里声明的对象是无效的  
        /*Object obj= new Object(); */  
          
        while(true){  
              
            synchronized (obj) {  
                if(ticket>0){      
                      
                    try {  
                        Thread.sleep(10);  
                          
                    } catch (InterruptedException e) {  
                          
                        e.printStackTrace();  
                    }  
                    System.out.println(Thread.currentThread().getName()+".....sale : "+ ticket--);  
                      
                }  
            }  
              
        }  
          
    }   
  
      
  
}  

调用:

public class TicketDemo2 {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
          
        Ticket2 t = new Ticket2();  
          
        Thread t1 = new Thread(t);  
        Thread t2 = new Thread(t);  
        Thread t3 = new Thread(t);  
        Thread t4 = new Thread(t);  
          
        t1.start();  
        t2.start();  
        t3.start();  
        t4.start();       
          
  
    }  
  
}  




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8383次
    • 积分:191
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:8篇
    • 译文:0篇
    • 评论:0条
    文章分类